处理具有混合日期格式的 Pandas 数据框列

Posted

技术标签:

【中文标题】处理具有混合日期格式的 Pandas 数据框列【英文标题】:Handling Pandas dataframe columns with mixed date formats 【发布时间】:2015-01-11 07:20:50 【问题描述】:

我导入了一个 CSV 文件,该文件具有混合数据格式 - read_csv 识别的一些日期格式,以及一些 Excel 串行日期时间格式(例如 41,866.321)。

导入数据后,列类型显示为对象(给定不同类型的数据),日期(两种类型的格式)都有 dtype 字符串。

我想使用 to_datetime 方法将已识别的字符串日期格式转换为数据框列中的日期时间,将无法识别的字符串保留为 excel 格式,然后我可以将其隔离并离线更正。但除非我逐行应用该方法(太慢了),否则它无法做到这一点。

有没有人有更聪明的方法来解决这个问题?

更新:经过更多修改后,我找到了这个解决方案,使用 coerce = True 强制转换列数据类型,然后识别可以交叉引用回原始文件的空值。但如果有更好的方法来做到这一点(例如修复无法识别的时间戳),请告诉我。

df1['DateTime']=pd.to_datetime(df1['Time_Date'],coerce=True)
nulls=df1['Time_Date'][df1['Time_Date'].notnull()==False]

【问题讨论】:

您的解决方案听起来很合理。尽管您可能希望将您的解决方案放入答案框中,然后将其作为正确答案接受。这样,它就会显示为将来搜索的人的答案。 感谢京东做到了 【参考方案1】:

在进行了一些修改后,我找到了这个解决方案,使用 coerce = True 强制转换列数据类型,然后识别可以交叉引用回原始文件的空值。但如果有更好的方法来做到这一点(例如修复无法识别的时间戳),请告诉我。

df1['DateTime']=pd.to_datetime(df1['Time_Date'], errors='coerce')
nulls=df1['Time_Date'][df1['Time_Date'].notnull()==False]

【讨论】:

以上是关于处理具有混合日期格式的 Pandas 数据框列的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas 数据框列中填充缺失的日期值

如何从 Pandas 数据框列中的日期时间减去 3 小时?

pandas使用pd.DatetimeIndex函数将混合格式的日期数据(包含字符串datetime对象pd.Timestamp)数据转化为时间索引数据DatetimeIndex

pandas使用pd.DatetimeIndex函数将混合格式的日期数据数据转化为时间索引数据DatetimeIndex通过index参数为Series数据指定时间对象索引

pandas使用pd.DatetimeIndex函数将混合格式的日期数据数据转化为时间索引数据DatetimeIndex通过index参数为Series数据指定时间对象索引

在新的 pandas 数据框列中计算日期时间差(以年、月等为单位)