我有一个这样的数据框:
并且如您所见,列标题“Arts & Social Sciences 1, 470, 905, 1375”应该是一行本身,我想设置更合适的列标题,例如“课程、男性、女性、总计” .
本质上,我想将我当前的列标题作为一行数据“下推”,并设置新的列标题。 我该怎么做?
我希望我的数据框看起来像这样:
教师 | 男 | 女 | 总计 |
---|---|---|---|
艺术与社会科学 1 | 470 | 905 | 1375 |
艺术与社会科学 2 | 438 | 1085 | 1523 |
...等等
---编辑---
感谢您的回复!
我应该提供更多信息并声明我没有在使用 Pandas 时读取这个数据框,而是使用 tabula
库和 tabula.read_pdf() 函数从 PDF 中读取它,然后数据框出来了像这样。有什么想法吗?
答案 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']