我正在嘗試將日期格式更改為列,但我無法應用我的函式,因為我有 NaN 單元格。
# change date format
def dmy_to_dmy(d):
return datetime.strptime(d, '%d %B %Y').strftime('%d/%m/%Y')
dates2['Dates_Reins'] = dates2['Dates_Reins'].apply(dmy_to_dmy)
我的資料如下所示:
46 9 September 2021
47 NaN
48 24 July 2021
49 28 September 2021
50 18 October 2021
51 8 January 2021
52 NaN
謝謝
uj5u.com熱心網友回復:
有兩種選擇,解決問題或檢測問題。第一個是容易的,因為如果它沒有發生,你會嘗試通過。第二個將檢測到 NaN
第一個解決方案
# change date format
def dmy_to_dmy(d):
try:
return datetime.strptime(d, '%d %B %Y').strftime('%d/%m/%Y')
except TypeError:
return d
dates2['Dates_Reins'] = dates2['Dates_Reins'].apply(dmy_to_dmy)
第二種解決方案
# change date format
def dmy_to_dmy(d):
if d == np.nan:
return d
else:
return datetime.strptime(d, '%d %B %Y').strftime('%d/%m/%Y')
dates2['Dates_Reins'] = dates2['Dates_Reins'].apply(dmy_to_dmy)
由于您沒有提供資料d==np.nan
,您必須自己查找
uj5u.com熱心網友回復:
您可以檢測函式的輸入是否為Nan
值并在開始操作之前將其回傳:
def dmy_to_dmy(d):
if d == np.nan:
return np.nan
return datetime.strptime(d, '%d %B %Y').strftime('%d/%m/%Y')
uj5u.com熱心網友回復:
您可以讓您的函式忽略 NaN:
def dmy_to_dmy(d):
if isinstance(d, float) and np.isnan(d):
return np.nan
return datetime.strptime(d, '%d %B %Y').strftime('%d/%m/%Y')
dates2['Dates_Reins'] = dates2['Dates_Reins'].apply(dmy_to_dmy)
或者,僅對非 NaN 值呼叫您的函式:
notna = dates2['Dates_Reins'].notna()
dates2['Dates_Reins'] = dates2.loc[notna, 'Dates_Reins'].apply(dmy_to_dmy)
uj5u.com熱心網友回復:
嘗試:
dates2['Dates_Reins'].apply(lambda x: dmy_to_dmy(x) if x != np.nan else x)
靈感來自:https ://stackoverflow.com/a/56589062/7509907
uj5u.com熱心網友回復:
我不會apply
在這里使用:
dates2['Dates_Reins'] = (
pd.to_datetime(dates2['Dates_Reins'], format='%d %B %Y')
.dt.strftime('%d/%m/%Y')
)
pd.to_datetime()
可以代替strptime()
- 訪問器
.dt
允許直接訪問strftime()
這更快并且隱式處理缺失值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466687.html
下一篇:使用熊貓根據另一列的值更改列的值