【问题标题】:Read Excel file with merged cells Pandas读取合并单元格的 Excel 文件 Pandas
【发布时间】:2021-11-21 00:30:11
【问题描述】:

我正在尝试读取包含合并单元格的 Excel 文件并从中创建字典列表。 DataFrame 看起来像:

    Name Group        Type    Values
0   AC01   A01  Individual   Value 1
1    NaN   NaN         NaN   Value 2
2    NaN   NaN         NaN   Value 3
3    NaN   NaN         NaN   Value 4
4    NaN   NaN         NaN   Value 5
5   AC02   A02  Individual   Value 6
6    NaN   NaN         NaN   Value 7
7    NaN   NaN         NaN   Value 8
8    NaN   NaN         NaN   Value 9
9    NaN   NaN         NaN  Value 10
10  AC03   A03  Individual  Value 11
11   NaN   NaN         NaN  Value 12
12   NaN   NaN         NaN  Value 13
13   NaN   NaN         NaN  Value 14
14   NaN   NaN         NaN  Value 15

为了创建一个字典列表,我正在做:

import pandas as pd

data = pd.read_excel(io="merged_cells.xlsx", usecols="A:D")
df = (
    pd.DataFrame(data)
    .rename(
        columns={
            data.columns[0]: "name",
            data.columns[1]: "grp",
            data.columns[2]: "type",
            data.columns[3]: "values",
        }
    )
    .to_dict(orient="records")
)

结果:

[{'grp': 'A01', 'name': 'AC01', 'type': 'Individual', 'values': 'Value 1'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 2'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 3'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 4'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 5'},
 {'grp': 'A02', 'name': 'AC02', 'type': 'Individual', 'values': 'Value 6'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 7'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 8'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 9'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 10'},
 {'grp': 'A03', 'name': 'AC03', 'type': 'Individual', 'values': 'Value 11'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 12'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 13'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 14'},
 {'grp': nan, 'name': nan, 'type': nan, 'values': 'Value 15'}]

我想要实现的是每个字典中要转换为列表的最后一列如下:

[
    {
        "grp": "A01",
        "name": "AC01",
        "type": "Individual",
        "values": ["Value 1", "Value 2", "Value 3", "Value 4", "Value 5"]
    }
    {
        "grp": "A02",
        "name": "AC02",
        "type": "Individual",
        "values": ["Value 6", "Value 7", "Value 8", "Value 9", "Value 10"]
    }
    {
        "grp": "A03",
        "name": "AC03",
        "type": "Individual",
        "values": ["Value 11", "Value 12", "Value 13", "Value 14", "Value 15"]
    }
]

【问题讨论】:

    标签: python excel pandas dataframe


    【解决方案1】:

    IIUC,你可以试试:

    (
        df.ffill()
        .groupby(df.columns.to_list()[:-1], as_index=False)
        .agg(list)
        .to_dict('records')
    )
    

    【讨论】:

    • 是的,您确实理解正确。奇迹般有效。非常感谢兄弟,你真的拯救了一天(Y)
    【解决方案2】:

    使用 fillna 填充前向值并聚合 Values 以在创建组后列出:

    out = df.ffill().groupby(['Name', 'Group', 'Type']) \
            .agg({'Values': list}).reset_index() \
            .to_dict(orient='records')
    

    输出:

    >>> out
    [{'Name': 'AC01',
      'Group': 'A01',
      'Type': 'Individual',
      'Values': ['Value 1', 'Value 2', 'Value 3', 'Value 4', 'Value 5']},
     {'Name': 'AC02',
      'Group': 'A02',
      'Type': 'Individual',
      'Values': ['Value 6', 'Value 7', 'Value 8', 'Value 9', 'Value 10']},
     {'Name': 'AC03',
      'Group': 'A03',
      'Type': 'Individual',
      'Values': ['Value 11', 'Value 12', 'Value 13', 'Value 14', 'Value 15']}]
    

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2021-01-17
      • 2019-07-08
      相关资源
      最近更新 更多