Python:如何将列标题“降级”为行并重命名列标题(不替换原始列标题)?

时间:2021-07-08 14:39:24

标签: python pandas dataframe

我有一个这样的数据框:

enter image description here

并且如您所见,列标题“Arts & Social Sciences 1, 470, 905, 1375”应该是一行本身,我想设置更合适的列标题,例如“课程、男性、女性、总计” .

本质上,我想将我当前的列标题作为一行数据“下推”,并设置新的列标题。 我该怎么做?

我希望我的数据框看起来像这样:

<头>
教师 总计
艺术与社会科学 1 470 905 1375
艺术与社会科学 2 438 1085 1523

...等等

---编辑---

感谢您的回复! 我应该提供更多信息并声明我没有在使用 Pandas 时读取这个数据框,而是使用 tabula 库和 tabula.read_pdf() 函数从 PDF 中读取它,然后数据框出来了像这样。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果重新读取数据为时已晚,您可以将列的值和当前值堆叠在一起,并生成一个传递了列名的新数据框:

import numpy as np

all_values = np.row_stack((df.columns, df.to_numpy()))
new_df = pd.DataFrame(all_values, columns=["Faculty", "Male", "Female", "Total"])

tabula.read_pdf 似乎也支持 pandas 选项,因此:

col_names = ["Faculty", "Male", "Female", "Total"]
tabula.read_pdf(path,
                pandas_options=dict(header=None, names=col_names))

答案 1 :(得分:1)

如评论中所述,如果您正在阅读 CSV 文件,则可以传递列名:

df = pd.read_csv(filePath, names=["Faculty", "Male", "Female", "Total"])

但是如果你已经有了数据框,你可以将列添加到-1的索引,然后你可以重置索引,如果需要,你也可以对索引进行排序。:

df.loc[-1] = df.columns.to_list() 
df = df.sort_index().reset_index(drop=True)
df.columns = ['Faculty', 'Male', 'Female', 'Totals']
相关问题