我有一个这样的表格,我想上传xlsx文件,不知道在哪里上传:
姓名 曾贤志 姓名 周志 姓名 黄明芳
性别 男 性别 男 性别 女
部门 管理部 部门 销售部 部门 IT部
工资 2000 工资 3000 工资 4500
姓名 郭城 姓名 刘华平 姓名 张二山
性别 男 性别 女 性别 男
部门 后勤部 部门 销售部 部门 管理部
工资 1800 工资 3600 工资 2400
姓名 梁天 姓名 牛三挺 姓名 洪峰
性别 男 性别 男 性别 男
部门 行政部 部门 财务部 部门 管理部
工资 1800 工资 2000 工资 4200
姓名 求千仞 姓名 龙杰 姓名 林林
性别 男 性别 男 性别 女
部门 财务部 部门 销售部 部门 销售部
工资 2100 工资 2620 工资 1500
想要这样的桌子:
姓名 性别 部门 工资
曾贤志 男 管理部 2000
周志 男 销售部 3000
黄明芳 女 IT部 4500
郭城 男 后勤部 1800
刘华平 女 销售部 3600
张二山 男 管理部 2400
梁天 男 行政部 1800
牛三挺 男 财务部 2000
洪峰 男 管理部 4200
求千仞 男 财务部 2100
龙杰 男 销售部 2620
林林 女 销售部 1500
我被困在这里了:
import pandas as pd
df=pd.read_excel('./重新合并列表.xlsx',sheet_name='结果2')
print(df)
print(
df.dropna(how='all')
.dropna(how='all',axis=1)
)
示例代码
为了回答这个问题,我创建了一个CSV文件格式字符串来创建CSV文件。
import pandas as pd
import io
csv1 = '''姓名,曾贤志,,姓名,周志,,姓名,黄明芳
性别,男,,性别,男,,性别,女
部门,管理部,,部门,销售部,,部门,IT部
工资,2000,,工资,3000,,工资,4500
,,,,,,,
姓名,郭城,,姓名,刘华平,,姓名,张二山
性别,男,,性别,女,,性别,男
部门,后勤部,,部门,销售部,,部门,管理部
工资,1800,,工资,3600,,工资,2400
,,,,,,,
姓名,梁天,,姓名,牛三挺,,姓名,洪峰
性别,男,,性别,男,,性别,男
部门,行政部,,部门,财务部,,部门,管理部
工资,1800,,工资,2000,,工资,4200
,,,,,,,
姓名,求千仞,,姓名,龙杰,,姓名,林林
性别,男,,性别,男,,性别,女
部门,财务部,,部门,销售部,,部门,销售部
工资,2100,,工资,2620,,工资,1500'''
以下代码可用于将上述文本文件作为 DataFrame 加载以获取答案。您可以使用
read_excel
函数从 Excel 文件路径加载它。
df = pd.read_csv(io.StringIO(csv1), header=None)
df:
代码
grp = df.isna().all(axis=1).cumsum()
idx = df.iloc[:, 0].dropna().unique()
tmp = df.dropna(how='all', axis=1).dropna(how='all').loc[:, lambda x: x.iloc[0].ne('姓名')]
out = (pd.concat([df1.set_axis(idx) for _, df1 in tmp.groupby(grp)], axis=1).T
.reset_index(drop=True))
输出:
姓名 性别 部门 工资
0 曾贤志 男 管理部 2000
1 周志 男 销售部 3000
2 黄明芳 女 IT部 4500
3 郭城 男 后勤部 1800
4 刘华平 女 销售部 3600
5 张二山 男 管理部 2400
6 梁天 男 行政部 1800
7 牛三挺 男 财务部 2000
8 洪峰 男 管理部 4200
9 求千仞 男 财务部 2100
10 龙杰 男 销售部 2620
11 林林 女 销售部 1500