gpt4 book ai didi

python - Pandas Dataframe : df. 应用忽略错误行

转载 作者:行者123 更新时间:2023-12-05 02:48:19 28 4
gpt4 key购买 nike

早上好!我正在尝试将具有多种格式的多个日期的列转换为日期时间列。

import pandas as pd

data = {
'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)

如果无法转换为日期时间,是否可以在应用函数中跳过一行?或者将错误行转换为默认日期(即“1900-01-01”)?

最佳答案

如果在 to_datetime 中使用 errors='coerce'获取 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

然后按 c2 列删除带有 NaT 的行:

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

或者您可以将它们替换为某个日期时间(不是字符串 '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

关于python - Pandas Dataframe : df. 应用忽略错误行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64555162/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com