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 indexingisnull 创建的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 上调试的主要内容,如果未能解决你的问题,请参考以下文章

python(pandas模块)?

python中利用pandas怎么处理缺省值

Python pandas用法

python pandas中describe()各项含义及求值

pandas python 怎么删除表格中的某一行

python pandas 如何去掉层次化索引