我有一个导入的csv文件,其中有多个列的日期格式为" 2001年1月5日10:20"。 (注意不是零填充日)
如果我df.dtype
,那么它会将列显示为对象而不是字符串或日期时间。我需要能够减去2列值来计算差异,所以我试图让它们进入我可以做到的状态。
目前,如果我在最后尝试减法测试,我会收到错误unsupported operand type(s) for -: 'str' and 'str'
。
我尝试了多种方法,但每次尝试都会遇到问题。 任何帮助,将不胜感激。如果我需要提供更多信息,那么我会。
答案 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对象,请考虑以下示例:
答案 2 :(得分:1)
我发现问题与列中的缺失值有关。使用coerce=True
以便df["Date"] = pd.to_datetime(df["Date"], coerce=True)
解决问题。