Pandas Python:KeyError 日期
Posted
技术标签:
【中文标题】Pandas Python:KeyError 日期【英文标题】:Pandas Python: KeyError Date 【发布时间】:2020-04-24 06:56:49 【问题描述】:我正在导入python,它将自动创建一个日期时间对象。
但是,我希望第一列是 Python 中的日期时间对象。数据看起来像
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)
【问题讨论】:
示例数据框中的日期列不是任何日期格式,也不是代码@Sam Harper中指定的日期格式 【参考方案1】:这看起来像一个 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】:不幸的是,read_csv 无法处理以数字形式给出的日期列。 但好消息是 Pandas 确实有合适的功能来做到这一点。 read_csv 调用后:
df.Date = pd.to_datetime(df.Date - 25569, unit='D').dt.round('ms')
据我所知,您的 Date 实际上是自 30.12.1899 以来的天数 (加上一天中的小数部分)。 上述“校正因子”(25569) 工作正常。对于 Date == 0 它给出 只是上面的 Excel 纪元开始日期。
建议四舍五入到毫秒(甚至可能是秒)。 否则你会得到不准确的四舍五入导致的奇怪效果 一天的小数部分。 例如。 0.33333333 对应于 8 小时 可以计算为 07:59:59.999712.
【讨论】:
【参考方案3】:你有两个问题。
我们不知道 CSV 有哪些数据和列,但为了让 pandas 将日期作为列提取,它必须是该 csv 文件中的列。
应用无法正常工作。您必须将 apply 的结果分配回日期,如
data['Date'] = data['Date'].apply(lambda x: datetime.strptime(x, '%d/%m/%Y'))
【讨论】:
以上是关于Pandas Python:KeyError 日期的主要内容,如果未能解决你的问题,请参考以下文章
使用 .loc() 时的 Pandas KeyError [重复]
KeyError:“[['','']] 中没有一个在 [columns] 中”pandas python