Python Pandas - 将日期列转换为列索引

24

我有一个数据表,它是从CSV文件导入到DataFrame中的。

这些数据包含大约10个分类字段、1个月份列(按日期时间格式)和其余的数据系列。

如何将日期列转换为跨越列轴的索引?


3
如果你在调用函数时使用了index_colparse_dates=True参数,read_csv会自动完成这项任务。 - behzad.nouri
3个回答

37
你可以使用set_index函数:
df.set_index('month')
例如:
In [1]: df = pd.DataFrame([[1, datetime(2011,1,1)], [2, datetime(2011,1,2)]], columns=['a', 'b'])

In [2]: df
Out[2]: 
   a                   b
0  1 2011-01-01 00:00:00
1  2 2011-01-02 00:00:00

In [3]: df.set_index('b')
Out[3]: 
            a
b            
2011-01-01  1
2011-01-02  2

谢谢Andy 我能否设置索引,使日期沿着另一个轴?这样会分组值吗? - MrHopko
1
你能给出一个你拥有的DataFrame示例和你想要的吗?我不确定将日期列作为列索引是否有意义...这不会对值进行分组,只是将一个列作为索引。 :) - Andy Hayden
我希望数据排列方式是每一列代表一个月。表格中的每一行代表不同的时间序列。这样说清楚了吗?我想用一个表格来演示,但我不知道如何在这个网站上插入表格。 - MrHopko
一个相关的问题是:如何在分层索引中将项目从一个索引轴转移到另一个索引轴? - MrHopko
查看文档中的stack()和unstack()。如需更多帮助,请提供更多细节。(插入表格没有特殊技巧 - 只需使用空格即可。) - Dan Allan
1
将 inplace=True 添加到 set_index 中,否则它不会按预期工作。 - Serhii Kushchenko

7

我曾经遇到类似的问题,通过使用 reset_index 方法解决了。但是你也可以使用 set_indexreset_index 方法:

df_ind = df.set_index(['A', 'B'])

或者

df.reset_index(level=0, inplace=True)

3

如果您事先不知道日期列的名称,并且需要根据数据中的时间序列列自动设置索引

df.set_index((df.select_dtypes(include=[np.datetime64]).columns).tolist())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接