python - 列标题的 set_index 等效项

标签 python pandas

在 Pandas 中,如果我有一个如下所示的 DataFrame:

            0       1       2       3       4       5       6
0                2013    2012    2011    2010    2009    2008
1     January   3,925   3,463   3,289   3,184   3,488   4,568
2    February   3,632   2,983   2,902   3,053   3,347   4,527
3       March   3,909   3,166   3,217   3,175   3,636   4,594
4       April   3,903   3,258   3,146   3,023   3,709   4,574
5         May   4,075   3,234   3,266   3,033   3,603   4,511
6        June   4,038   3,272   3,316   2,909   3,057   4,081
7        July           3,661   3,359   3,062   3,354   4,215
8      August           3,942   3,417   3,077   3,395   4,139
9   September           3,703   3,169   3,095   3,100   3,752
10    October           3,727   3,469   3,179   3,375   3,874
11   November           3,722   3,145   3,159   3,213   3,567
12   December           3,866   3,251   3,199   3,324   3,362
13      Total  23,482  41,997  38,946  37,148  40,601  49,764

我可以使用以下方法将第一列转换为索引:

In [55]: df.set_index([0])
Out[55]: 
                1       2       3       4       5       6
0                                                        
             2013    2012    2011    2010    2009    2008
January     3,925   3,463   3,289   3,184   3,488   4,568
February    3,632   2,983   2,902   3,053   3,347   4,527
March       3,909   3,166   3,217   3,175   3,636   4,594
April       3,903   3,258   3,146   3,023   3,709   4,574
May         4,075   3,234   3,266   3,033   3,603   4,511
June        4,038   3,272   3,316   2,909   3,057   4,081
July                3,661   3,359   3,062   3,354   4,215
August              3,942   3,417   3,077   3,395   4,139
September           3,703   3,169   3,095   3,100   3,752
October             3,727   3,469   3,179   3,375   3,874
November            3,722   3,145   3,159   3,213   3,567
December            3,866   3,251   3,199   3,324   3,362
Total      23,482  41,997  38,946  37,148  40,601  49,764

我的问题是如何将第一行转换为列标题? 我能得到的最接近的是:

In [53]: df.set_index([0]).rename(columns=df.loc[0])
Out[53]: 
             2013    2012    2011    2010    2009    2008
0                                                        
             2013    2012    2011    2010    2009    2008
January     3,925   3,463   3,289   3,184   3,488   4,568
February    3,632   2,983   2,902   3,053   3,347   4,527
March       3,909   3,166   3,217   3,175   3,636   4,594
April       3,903   3,258   3,146   3,023   3,709   4,574
May         4,075   3,234   3,266   3,033   3,603   4,511
June        4,038   3,272   3,316   2,909   3,057   4,081
July                3,661   3,359   3,062   3,354   4,215
August              3,942   3,417   3,077   3,395   4,139
September           3,703   3,169   3,095   3,100   3,752
October             3,727   3,469   3,179   3,375   3,874
November            3,722   3,145   3,159   3,213   3,567
December            3,866   3,251   3,199   3,324   3,362
Total      23,482  41,997  38,946  37,148  40,601  49,764

但我必须进去并删除第一行。

最佳答案

处理此问题的最佳方法是避免陷​​入这种情况。

df 是如何创建的?例如,如果您使用 read_csv 或变体,则 header=0 将告诉 read_csv 将第一行解析为列名。


鉴于 df 你有它,我认为没有比你描述的更简单的方法来修复它。要删除第一行,您可以使用 df.iloc:

df = df.iloc[1:]

关于python - 列标题的 set_index 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107214/

相关文章:

python - 将 Teradata 查询读入 Pandas

python - 尝试使用 argparse 和 sys.argv 而无需在每个运行时都使用 sys.argv

python - 为什么我的 Python 函数不将列转换为日期时间格式

python - Pandas 有条件地复制单元格值

python - 基于其他列在 DataFrame 中创建新列

python - 以字符串元组作为索引的 Pandas DataFrame

javascript - Python/IE7 - 如何绕过警告框

python - 从 Python 2 环境打开 Spyder 仍然在 Spyder 中运行 Python 3

Python pandas dataframe pivot 仅适用于 pivot_table() 但不适用于 set_index() 和 unstack()

python 数据结构 : map<string, vector<int>>