将CSV中的对象转换为datetime

时间:2016-12-11 17:18:01

标签: python csv datetime pandas dataframe

我有一个导入的csv文件,其中有多个列的日期格式为" 2001年1月5日10:20"。 (注意不是零填充日)

如果我df.dtype,那么它会将列显示为对象而不是字符串或日期时间。我需要能够减去2列值来计算差异,所以我试图让它们进入我可以做到的状态。

目前,如果我在最后尝试减法测试,我会收到错误unsupported operand type(s) for -: 'str' and 'str'

我尝试了多种方法,但每次尝试都会遇到问题。 任何帮助,将不胜感激。如果我需要提供更多信息,那么我会。

3 个答案:

答案 0 :(得分:3)

根据@MaxU的建议,您可以使用pd.to_datetime()方法将给定列的值添加到“适当的”列表中。格式,像这样:

df['datetime'] = pd.to_datetime(df.datetime)

你需要在你需要的任何列上执行此操作,这些列需要转换为正确的dtype。

或者,您可以使用parse_dates方法的pd.read_csv()参数,如下所示:

df = pd.read_csv(path, parse_dates=[1,2,3])

其中列1,2,3应包含可以解释为日期的数据。

我希望这会有所帮助。

答案 1 :(得分:2)

使用此方法将列转换为日期时间

df["Date"] = pd.to_datetime(df["Date"])

如果列具有空值,则将错误级别更改为强制以忽略错误:Details

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

之后你应该可以减去两个日期。

示例:

import pandas
df = pandas.DataFrame(columns=['to','fr','ans'])
df.to = [pandas.Timestamp('2014-01-24 13:03:12.050000'), pandas.Timestamp('2014-01-27 11:57:18.240000'), pandas.Timestamp('2014-01-23 10:07:47.660000')]
df.fr = [pandas.Timestamp('2014-01-26 23:41:21.870000'), pandas.Timestamp('2014-01-27 15:38:22.540000'), pandas.Timestamp('2014-01-23 18:50:41.420000')]
(df.fr-df.to).astype('timedelta64[h]')

请参阅此答案以获取更多详细信息:

Calculate Pandas DataFrame Time Difference Between Two Columns in Hours and Minutes

如果要在从csv读取时直接将列加载为datetime对象,请考虑以下示例:

Pandas read csv dateint columns to datetime

答案 2 :(得分:1)

我发现问题与列中的缺失值有关。使用coerce=True以便df["Date"] = pd.to_datetime(df["Date"], coerce=True)解决问题。