我需要將date 列決議為 string,它可以作業,但是我遇到了一些問題,首先是沒有將 string 資料型別作為輸出:
import pandas as pd # No warning raised
exit_format = '%d-%m-%Y'
series = pd.Series([1,2,None] ,dtype='datetime64[ns]')
series.dt.strftime(exit_format)
這(預期行為)并不是什么大問題,因為它可以astype('string')用Nan. 但最糟糕的是,如果所有值都是 NaN-Nat,我會得到這個FutureWarning:
# Warning raised!
series = pd.Series([None,None,None] ,dtype='datetime64[ns]')
series.dt.strftime(exit_format)
FutureWarning: In a future version, the Index constructor will not infer numeric dtypes when passed object-dtype sequences (matching Series behavior)
這似乎來自熊貓版本> = 1.4.0(我的是'1.4.1')的一個已知問題。我的問題是,我怎樣才能做出一個好的解決方法?為什么當所有值都是 Nan 時首先出現此警告?最好我正在尋找一種不直接抑制警告而是抑制其來源的解決方案。
基本上,我正在尋找一個將日期列轉換為字串列但將 NaN 決議為空字串或以更好的方式處理錯誤(如使用默認值)但不發出警告的函式。
pd:一個可能的解決方案可能是在末尾添加一個非空行并將其洗掉,但是如果有一些實作的功能實際上運行良好,我正在徘徊,而不使用技巧......
uj5u.com熱心網友回復:
NaT正如@finavatar 正確建議的那樣,這是考慮值(Pandas>=1.0.0)的一種更慣用的方法:
import pandas as pd
series = pd.Series([None, None, None], dtype="datetime64[ns]")
series = series.apply(lambda x: x.strftime("%d-%m-%Y") if x is not pd.NaT else x)
print(series) # No warning message
# Output
0 NaT
1 NaT
2 NaT
dtype: datetime64[ns]
并且使用非空系列:
import pandas as pd
series = pd.Series(["04/03/2022", None, None], dtype="datetime64[ns]")
series = series.apply(lambda x: x.strftime("%d-%m-%Y") if x is not pd.NaT else x)
print(series) # No warning message
0 03-04-2022
1 NaT
2 NaT
dtype: object # == string
uj5u.com熱心網友回復:
我最近也有這個問題。我為繞過這個警告所做的只是在使用 strftime 之前先檢查日期值是否為非 NaN。
例子:
if df['date'].isnull().values == False:
df['date'] = df['date'].dt.strftime('%b %d, %Y')
要么
如果您需要檢查日期列的 ANY /ALL nan 值:
句法:
df['your column name'].isnull().values.any()
df['your column name'].isnull().values.all()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456828.html
