我导入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)
答案 0 :(得分:0)
您在这里有两个问题。
我们不知道CSV包含哪些数据和列,但是为了让熊猫将日期作为一列,它必须是该csv文件上的一列。
“应用”不适当地使用。您必须分配回溯日期的结果,因为
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 。