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

python 3、pandas 和创建新列失败并出现 keyerror

Pandas KeyError 使用枢轴

python字典日期时间作为键,keyError

python KeyError:'日期时间'