熊猫Python:KeyError日期

时间:2020-01-06 18:22:32

标签: python pandas datetime

我导入python,它将自动创建日期时间对象。

但是我希望第一列成为Python中的datetime对象。数据看起来像

Date,cost
41330.66667,100
41331.66667,101
41332.66667,102
41333.66667,103

当前代码如下:

from datetime import datetime
import pandas as pd

data = pd.read_csv(r"F:\Sam\PJ\CSV2.csv")
data['Date'].apply(lambda x: datetime.strptime(x, '%d/%m/%Y'))

print(data)

3 个答案:

答案 0 :(得分:0)

您在这里有两个问题。

  1. 我们不知道CSV包含哪些数据和列,但是为了让熊猫将日期作为一列,它必须是该csv文件上的一列。

  2. “应用”不适当地使用。您必须分配回溯日期的结果,因为 data['Date'] = data['Date'].apply(lambda x: datetime.strptime(x, '%d/%m/%Y'))

答案 1 :(得分:0)

这看起来像是Excel日期时间格式。这称为序列日期。要从该序列号开始转换,您可以执行以下操作:

data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))

哪个输出:

>>> data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))
0   2013-02-25 10:00:00.288
1   2013-02-26 10:00:00.288
2   2013-02-27 10:00:00.288
3   2013-02-28 10:00:00.288

要将其分配给data['Date'],只需执行以下操作:

data['Date'] = data['Date'].apply(lambda x: datetime.fromtimestamp( (x - 25569) *86400.0))

#df
                     Date  cost
0 2013-02-25 16:00:00.288   100
1 2013-02-26 16:00:00.288   101
2 2013-02-27 16:00:00.288   102
3 2013-02-28 16:00:00.288   103

答案 2 :(得分:0)

不幸的是, read_csv 无法处理以数字形式给出的日期列。 但是好消息是 Pandas 确实具有合适的功能。 调用 read_csv 之后:

df.Date = pd.to_datetime(df.Date - 25569, unit='D').dt.round('ms')

据我所知,您的日期实际上是 30.12.1899 以来的天数 (加上一天的小数部分)。 上面的“校正因子”( 25569 )正常运行。对于 Date == 0 ,它给出了 恰好是上述Excel时期开始日期。

建议将其舍入到毫秒(甚至几秒)。 否则,由于舍入不正确,会产生怪异的效果 一天的小数部分。 例如。可以计算与 8小时相对应的 0.33333333 07:59:59.999712

相关问题