如何在转换 timedelta 变量时消除 pandas 中的错误?

Posted

技术标签:

【中文标题】如何在转换 timedelta 变量时消除 pandas 中的错误?【英文标题】:How to remove the error in pandas while converting timedelta variable? 【发布时间】:2017-12-14 06:57:45 【问题描述】:

我有一个 pandas 代码并处理大量数据文件。我使用以下代码将时间增量转换为日期时间索引。

df['date_time'] = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]
df['date_time'] = pd.DatetimeIndex(df['date_time'])

但是一个特定的数据文件给了我错误:

raise e
ValueError: Unknown string format

此错误背后的原因可能是什么?如果是数据文件中的数据无效,如何去除?

【问题讨论】:

可以添加一些示例数据吗? 该代码实际上适用于大多数输入数据。但是很少有输入文件显示此错误。所以我想知道这是否是由于无效数据。如果是这样,如何删除它们 在我的经验中并不少见,尤其是当数据加载时使用了未知的编码方案。如果您首先通过 pd.to_datetime(df['date_time']) 运行它会发生什么?根据我的经验,如果你能隔离出有问题的字符串,你就会得到答案。 【参考方案1】:

我认为您需要参数errors='coerce'to_datetime 中的非日期时间转换为NaT

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

如果需要删除所有带有NaT 的行,请使用dropna

df = df.dropna(subset=['date_time'])

示例:

a = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00",
     "2016-05-24 12:50:00","2016-05-25 23:00:00","aaa"]
df = pd.DataFrame('date_time':a)
print (df)
             date_time
0  2016-05-19 08:25:00
1  2016-05-19 16:00:00
2  2016-05-20 07:45:00
3  2016-05-24 12:50:00
4  2016-05-25 23:00:00
5                  aaa

df['date_time'] = pd.to_datetime(df['date_time'], errors='coerce')
print (df)
            date_time
0 2016-05-19 08:25:00
1 2016-05-19 16:00:00
2 2016-05-20 07:45:00
3 2016-05-24 12:50:00
4 2016-05-25 23:00:00
5                 NaT

df = df.dropna(subset=['date_time'])
print (df)
            date_time
0 2016-05-19 08:25:00
1 2016-05-19 16:00:00
2 2016-05-20 07:45:00
3 2016-05-24 12:50:00
4 2016-05-25 23:00:00

【讨论】:

感谢您的帮助!但是errors =“coerce”并没有改进代码:(当我尝试dropna时,我得到了以下错误:ValueError: No axis named date_time for object type 为什么没有改善?我将参数subset 添加到dropna,我希望它现在可以正常工作。 子集工作:) 但仍然是同样的错误! raise e ValueError: 未知的字符串格式。看来我必须手动检查数据文件! 嗯,如果使用errors='coerce' 得到Unknown string format ? 是的,我确实得到了错误!尽管有 errors='coerce' 和 dropna ! ://

以上是关于如何在转换 timedelta 变量时消除 pandas 中的错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 timedelta 转换为 pandas 中的时间?

在 Python Pandas DataFrame 中将 timedelta64[ns] 列转换为秒

将 python 2.7 timedelta.total_seconds() 转换为 python 2.6 中的等价物

在熊猫中将字符串转换为timedelta

在 Python 3.4 中将 datetime.time 转换为 datetime.timedelta

在转换为日期时间的列上使用 timedelta 和 strftime