Python Pandas 在 to_datetime 上调试
Posted
技术标签:
【中文标题】Python Pandas 在 to_datetime 上调试【英文标题】:Python Pandas Debugging on to_datetime 【发布时间】:2017-02-01 01:53:11 【问题描述】:数百万条数据记录在我的数据框中。我必须将字符串列转换为日期时间。我这样做如下:
allData['Col1'] = pd.to_datetime(allData['Col1'])
但是,有些字符串不是有效的日期时间字符串,因此我得到一个值错误。我不是很擅长用 Python 进行调试,所以我很难找到某些数据项不可转换的原因。
我需要 Python 向我显示行号,以及不可转换的值,而不是抛出一个无用的错误,什么都不告诉我。我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:您可以将boolean indexing
与isnull
创建的to_datetime
与参数errors='coerce'
一起检查NaT
值的条件一起使用 - 它创建NaT
,其中日期时间无效:
allData1 = allData[pd.to_datetime(allData['Col1'], errors='coerce').isnull()]
示例:
allData = pd.DataFrame('Col1':['2015-01-03','a','2016-05-08'],
'B':[4,5,6],
'C':[7,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3])
print (allData)
B C Col1 D E F
0 4 7 2015-01-03 1 5 7
1 5 8 a 3 3 4
2 6 9 2016-05-08 5 6 3
print (pd.to_datetime(allData['Col1'], errors='coerce'))
0 2015-01-03
1 NaT
2 2016-05-08
Name: Col1, dtype: datetime64[ns]
print (pd.to_datetime(allData['Col1'], errors='coerce').isnull())
0 False
1 True
2 False
Name: Col1, dtype: bool
allData1 = allData[pd.to_datetime(allData['Col1'], errors='coerce').isnull()]
print (allData1)
B C Col1 D E F
1 5 8 a 3 3 4
【讨论】:
由于某种原因,如果检测到一个错误,则将整列设为 NaT。有任何想法吗? allData['GPS_DateTime'] = pd.to_datetime(allData['GPS_DateTime'], errors='coerce') errorData = allData[allData['GPS_DateTime'].isnull()] 我认为你需要交换它:errorData = allData[allData['GPS_DateTime'].isnull()]
仅用于检查,所以先检查它然后通过allData['GPS_DateTime'] = pd.to_datetime(allData['GPS_DateTime'], errors='coerce')
转换为日期时间
allData['GPS_DateTime'] = pd.to_datetime(allData['GPS_DateTime'], errors='coerce') 给出一整列 NaT
如果不是机密数据,您可以将您的数据以 csv 格式发送到我的个人资料中的电子邮件吗?
还有其他代码乱七八糟 - 不幸的是,它是机密信息。看看能不能找到问题以上是关于Python Pandas 在 to_datetime 上调试的主要内容,如果未能解决你的问题,请参考以下文章