gpt4 book ai didi

python - 处理 pandas 中按月分类的数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:59 25 4
gpt4 key购买 nike

我有一个正在用 pandas 分析的数据集,其中所有数据按月分类。数据源自 MySQL 数据库,其中所有日期的格式均为“YYYY-MM-01”,例如,2013 年 10 月的所有行在月份列中都有“2013-10-01”。

我目前正在将数据读入 pandas(通过 MySQL 表的 .tsv 转储)

data = pd.read_table(filename,header=None,names=('uid','iid','artist','tag','date'),index_col=indexes, parse_dates='date') 

一切都很好,除了我运行的任何后续分析(我在其中进行每月重采样)总是使用月末约定表示日期(即 10 月的数据变为“2013-10-31”而不是'2013-10-01'),但这可能会导致不一致,原始数据的月份标记为“YYYY-MM-01”,而任何重采样数据的月份标记为“YYYY-MM-31”(或'-30' 或 '-28',视情况而定)。

我的问题是这样的:从一开始就可以将数据框中的所有日期转换为月末格式的最简单和/或最快的方法是什么? 请记住,日期是多索引中的几个索引之一,而不是列。我认为我最好的选择是在我的 pd.read_table 调用中使用修改后的 date_parser,它总是转换一个月到月末 session ,但我不确定如何处理它。

最佳答案

像现在一样阅读你的日期。

创建一些测试数据。我将日期设置为月初,但这并不重要。

In [39]: df = DataFrame(np.random.randn(10,2),columns=list('AB'),
index=date_range('20130101',periods=10,freq='MS'))

In [40]: df
Out[40]:
A B
2013-01-01 -0.553482 0.049128
2013-02-01 0.337975 -0.035897
2013-03-01 -0.394849 -1.755323
2013-04-01 -0.555638 1.903388
2013-05-01 -0.087752 1.551916
2013-06-01 1.000943 -0.361248
2013-07-01 -1.855171 -2.215276
2013-08-01 -0.582643 1.661696
2013-09-01 0.501061 -1.455171
2013-10-01 1.343630 -2.008060

不管是哪一天,强制转换到时间空间的月末

In [41]: df.index = df.index.to_period().to_timestamp('M')

In [42]: df
Out[42]:
A B
2013-01-31 -0.553482 0.049128
2013-02-28 0.337975 -0.035897
2013-03-31 -0.394849 -1.755323
2013-04-30 -0.555638 1.903388
2013-05-31 -0.087752 1.551916
2013-06-30 1.000943 -0.361248
2013-07-31 -1.855171 -2.215276
2013-08-31 -0.582643 1.661696
2013-09-30 0.501061 -1.455171
2013-10-31 1.343630 -2.008060

回到起点

In [43]: df.index = df.index.to_period().to_timestamp('MS')

In [44]: df
Out[44]:
A B
2013-01-01 -0.553482 0.049128
2013-02-01 0.337975 -0.035897
2013-03-01 -0.394849 -1.755323
2013-04-01 -0.555638 1.903388
2013-05-01 -0.087752 1.551916
2013-06-01 1.000943 -0.361248
2013-07-01 -1.855171 -2.215276
2013-08-01 -0.582643 1.661696
2013-09-01 0.501061 -1.455171
2013-10-01 1.343630 -2.008060

您还可以使用(和重新采样)作为句点

In [45]: df.index = df.index.to_period()

In [46]: df
Out[46]:
A B
2013-01 -0.553482 0.049128
2013-02 0.337975 -0.035897
2013-03 -0.394849 -1.755323
2013-04 -0.555638 1.903388
2013-05 -0.087752 1.551916
2013-06 1.000943 -0.361248
2013-07 -1.855171 -2.215276
2013-08 -0.582643 1.661696
2013-09 0.501061 -1.455171
2013-10 1.343630 -2.008060

关于python - 处理 pandas 中按月分类的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19371692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com