亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pandas Dataframe:df.apply 忽略錯誤行

Pandas Dataframe:df.apply 忽略錯誤行

紅糖糍粑 2024-01-16 10:43:59
早上好!我正在嘗試將具有各種格式的多個日期的列轉換為日期時間列。import pandas as pddata = {'c1':['2020/10/01','10/01/2020','10/1/2020','31/08/2020','12-21-2020','5-3-2020','05-03-2020','ERRER']    }df = pd.DataFrame (data, columns = ['c1'])上面的代碼創建了我的數據框以進行測試。如果我運行以下代碼,則會收到錯誤,因為“ERRER”不是有效日期:df['c2'] = df.apply(lambda x: pd.to_datetime(x['c1']), axis=1)如果無法將其轉換為日期時間,是否可以跳過 apply 函數中的一行?或者將錯誤行轉換為默認日期(即“1900-01-01”)?
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

errors='coerce'如果在to_datetimeget中使用NaT(日期時間缺失值),如果不是類似日期時間的值 - 您可以傳遞列以提高性能,而不是apply循環:


df['c2'] = pd.to_datetime(df['c1'], errors='coerce')

print (df)

? ? ? ? ? ?c1? ? ? ? ?c2

0? 2020/10/01 2020-10-01

1? 10/01/2020 2020-10-01

2? ?10/1/2020 2020-10-01

3? 31/08/2020 2020-08-31

4? 12-21-2020 2020-12-21

5? ? 5-3-2020 2020-05-03

6? 05-03-2020 2020-05-03

7? ? ? ?ERRER? ? ? ? NaT

NaT然后按列刪除帶 s 的行c2:


df1 = df.dropna(subset=['c2'])

print (df1)

? ? ? ? ? ?c1? ? ? ? ?c2

0? 2020/10/01 2020-10-01

1? 10/01/2020 2020-10-01

2? ?10/1/2020 2020-10-01

3? 31/08/2020 2020-08-31

4? 12-21-2020 2020-12-21

5? ? 5-3-2020 2020-05-03

6? 05-03-2020 2020-05-03

或者您可以將它們替換為某個日期時間(不是 string '1900-01-01'):


df['c2'] = pd.to_datetime(df['c1'], errors='coerce').fillna(pd.Timestamp('1900-01-01'))

print (df)

? ? ? ? ? ?c1? ? ? ? ?c2

0? 2020/10/01 2020-10-01

1? 10/01/2020 2020-10-01

2? ?10/1/2020 2020-10-01

3? 31/08/2020 2020-08-31

4? 12-21-2020 2020-12-21

5? ? 5-3-2020 2020-05-03

6? 05-03-2020 2020-05-03

7? ? ? ?ERRER 1900-01-01


print (df.dtypes)

c1? ? ? ? ? ? object

c2? ? datetime64[ns]

dtype: object


查看完整回答
反對 回復 2024-01-16
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

通過errors,coerce無法轉換的將返回NaT


df['c2'] = pd.to_datetime(df['c1'], errors='coerce')

df

Out[76]: 

           c1         c2

0  2020/10/01 2020-10-01

1  10/01/2020 2020-10-01

2   10/1/2020 2020-10-01

3  31/08/2020 2020-08-31

4  12-21-2020 2020-12-21

5    5-3-2020 2020-05-03

6  05-03-2020 2020-05-03

7       ERRER        NaT


查看完整回答
反對 回復 2024-01-16
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

您可能需要事先使用 轉換 ERRER replace。這意味著具有缺失值 NaT 的其他行將保持為 NaT。

df['c1'] = df['c1'].replace('ERRER', '01/01/1900')

之后它應該可以工作:

df['c2'] = df.apply(lambda x: pd.to_datetime(x['c1']), axis=1)


查看完整回答
反對 回復 2024-01-16
  • 3 回答
  • 0 關注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號