如何将大量小数据框组合成低维数据框?

问题描述 投票:0回答:1

我有一个这样的表格,我想上传xlsx文件,不知道在哪里上传:

姓名  曾贤志     姓名  周志      姓名  黄明芳
性别  男       性别  男       性别  女
部门  管理部     部门  销售部     部门  IT部
工资  2000        工资  3000        工资  4500
                            
姓名  郭城      姓名  刘华平     姓名  张二山
性别  男       性别  女       性别  男
部门  后勤部     部门  销售部     部门  管理部
工资  1800        工资  3600        工资  2400
                            
姓名  梁天      姓名  牛三挺     姓名  洪峰
性别  男       性别  男       性别  男
部门  行政部     部门  财务部     部门  管理部
工资  1800        工资  2000        工资  4200
                            
姓名  求千仞     姓名  龙杰      姓名  林林
性别  男       性别  男       性别  女
部门  财务部     部门  销售部     部门  销售部
工资  2100        工资  2620        工资  1500

enter image description here

想要这样的桌子:

姓名  性别  部门  工资
曾贤志 男   管理部 2000
周志  男   销售部 3000
黄明芳 女   IT部 4500
郭城  男   后勤部 1800
刘华平 女   销售部 3600
张二山 男   管理部 2400
梁天  男   行政部 1800
牛三挺 男   财务部 2000
洪峰  男   管理部 4200
求千仞 男   财务部 2100
龙杰  男   销售部 2620
林林  女   销售部 1500

enter image description here

我被困在这里了:

import pandas as pd
df=pd.read_excel('./重新合并列表.xlsx',sheet_name='结果2')
print(df)
print(
    df.dropna(how='all')
    .dropna(how='all',axis=1)
)
python pandas openpyxl
1个回答
0
投票

示例代码

为了回答这个问题,我创建了一个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
© www.soinside.com 2019 - 2024. All rights reserved.