将熊猫数据框中的对象列转换为日期时间

Mat*_*ton 7 python datetime pandas

我在格式为 dd/mm/yyyy 的 Pandas 数据框中有一个对象列,我想用 to_datetime 进行转换。

我尝试使用以下方法将其转换为日期时间:

df['Time stamp'] = pd.to_datetime(df['Time stamp'], format= '%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError: Unrecognized value type: <class 'str'>
ValueError: unconverted data remains:  
Run Code Online (Sandbox Code Playgroud)

这是否意味着某处有一个空白行,我已经检查了原始 csv 并且我看不到一个。

ALo*_*llz 9

这意味着你有一个额外的空间。虽然pd.to_datetime在没有指定任何格式的情况下通常非常擅长解析日期,但当您实际指定格式时,它必须完全匹配。

您可以通过.str.strip()在转换之前添加删除额外的空格来解决您的问题。

import pandas as pd
df['Time stamp'] = pd.to_datetime(df['Time stamp'].str.strip(), format='%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过使用dayfirst=True参数来利用其解析各种日期格式的能力

df['Time stamp'] = pd.to_datetime(df['Time stamp'], dayfirst=True)
Run Code Online (Sandbox Code Playgroud)

例子:

import pandas as pd
df = pd.DataFrame({'Time stamp': ['01/02/1988', '01/02/1988 ']})

pd.to_datetime(df['Time stamp'], format= '%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)

ValueError:未转换的数据仍然存在:

pd.to_datetime(df['Time stamp'].str.strip(), format='%d/%m/%Y')
#0   1988-02-01
#1   1988-02-01
#Name: Time stamp, dtype: datetime64[ns]

pd.to_datetime(df['Time stamp'], dayfirst=True)
#0   1988-02-01
#1   1988-02-01
#Name: Time stamp, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)