如何解决熊猫数据框:df.apply忽略错误行
早上好!我正在尝试将具有多种格式的多个日期的列转换为datetime列。
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)
如果无法将其转换为日期时间,是否可以跳过apply函数中的行?还是将错误行转换为默认日期(即“ 1900-01-01”)?
解决方法
将pytest_runtest_makereport
与errors
一起传递,因为无法转换的人将返回coerce
NaT
,
如果在to_datetime
中使用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
,则获得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
列中有NaT
的行:
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
):
'1900-01-01'
,
您可能需要预先使用replace
转换ERRER。这意味着其他缺少值NaT的行将保留为NaT。
df['c1'] = df['c1'].replace('ERRER','01/01/1900')
此后它应该工作:
df['c2'] = df.apply(lambda x: pd.to_datetime(x['c1']),axis=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。