pandas group by 在 Datetime 上,格式为 mm.dd.yyyy [重复]
Posted
技术标签:
【中文标题】pandas group by 在 Datetime 上,格式为 mm.dd.yyyy [重复]【英文标题】:pandas group by on Datetime with mm.dd.yyyy format [duplicate] 【发布时间】:2020-01-22 06:53:17 【问题描述】:当我使用groupby().sum()
运行下面的聚合代码时,我的Date
系列的格式似乎错误:它似乎返回了27.08.2019
之后的未来日期的结果,即使我的系列在那之后没有日期:
Date Obs
8189 2019-08-24 6.597940
8190 2019-08-24 0.758000
8191 2019-08-25 18.260892
8192 2019-08-25 6.590545
8193 2019-08-25 2.919198
8194 2019-08-25 0.838000
8195 2019-08-26 0.798000
8196 2019-08-26 6.597977
8197 2019-08-26 18.010977
8198 2019-08-26 2.882872
8199 2019-08-27 17.941132
8200 2019-08-27 0.847250
8201 2019-08-27 2.864728
8202 2019-08-27 6.730443
这段代码:
fiyat_w = fiyat_w.groupby('Date').sum()
fiyat_w = fiyat_w.reset_index()
返回聚合系列(每日传感器测量值的每日总和)以及对未来日期的观察:
2057 2019-12-01 27.980334
2058 2019-12-02 24.340758
2059 2019-12-03 21.063112
2060 2019-12-04 25.989285
2061 2019-12-05 27.839916
2062 2019-12-06 27.301501
2063 2019-12-07 27.049580
2064 2019-12-08 26.325082
fiyat_w['Date'].describe()
Out[59]:
count 2065
unique 2065
top 2016-11-14 00:00:00
freq 1
first 2014-01-01 00:00:00
last 2019-12-08 00:00:00
Name: DATE_OF_TRANSACTION, dtype: object
有什么问题?
【问题讨论】:
因为您的日期是mm.dd
格式,但是当您读错日期时,您将月份与日期颠倒了。请参阅有关正确转换日期时间的链接问题;您需要将显式格式字符串传递给to_datetime
,不要依赖默认行为; pandas.read_csv(..., daysfirst)
被称为是错误的,尤其是。用于混合格式的日期。
【参考方案1】:
检查指示的源行,例如2057 到 2064,也许他们和你一样 把它放在你的问题中。
您的日期中的月份和日期部分的顺序似乎颠倒了。
还要查看其他行,“中间”部分(月份)是否总是介于 1 和 12。如果不是,它证实了我的怀疑。
【讨论】:
我认为问题与您提到的问题有关。在聚合之前,我的数据与我的原始日期对应的值没有问题。但是聚合后 DateTime 对象的格式会扭曲。在格式更改之前是否可以保持相同的日期时间格式?我的数据跨度从 01.01.2014 到 28.08.2019,聚合数据中不可能包含 2019 年 12 月的值。【参考方案2】:我不明白。对我来说效果很好。
df
Out[6]:
row Date Obs
0 8189 24/08/2019 6.597940
1 8190 24/08/2019 0.758000
2 8191 25/08/2019 18.260892
3 8192 25/08/2019 6.590545
4 8193 25/08/2019 2.919198
5 8194 25/08/2019 0.838000
6 8195 26/08/2019 0.798000
7 8196 26/08/2019 6.597977
8 8197 26/08/2019 18.010977
9 8198 26/08/2019 2.882872
10 8199 27/08/2019 17.941132
11 8200 27/08/2019 0.847250
12 8201 27/08/2019 2.864728
13 8202 27/08/2019 6.730443
df2=df.groupby('Date')['Obs'].sum()
df2
Out[8]:
Date
24/08/2019 7.355940
25/08/2019 28.608635
26/08/2019 28.289826
27/08/2019 28.383553
Name: Obs, dtype: float64
【讨论】:
以上是关于pandas group by 在 Datetime 上,格式为 mm.dd.yyyy [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Python,在 Pandas DataFrame 的“group concat”中使用“order by”
如何在单个级别上添加新列时使用 pandas group-by?