gpt4 book ai didi

python - 如何使用 Python Pandas 处理多级数据?

转载 作者:行者123 更新时间:2023-12-04 07:42:10 24 4
gpt4 key购买 nike

我一直在尝试获取一些数据,即多级数据。
我的初始数据如下所示:
enter image description here
使用 python 脚本我正在获取这些数据。

df = pd.read_csv('(path)', header = [0, 1]);
阅读后的数据:
Name    Unnamed: 1_level_0  Address Unnamed: 3_level_0  Other Address Details Unnamed: 5_level_0

First Name Surname State City Pincode Landmark

Gaurav Tiwari Maharashtra Pune 411001 Lane-C
Pooja Mishal Maharashtra Sawantwadi 416510 Saliwada
Initial Data
如您所见,有些列的名称为“Unnamed: 1_level_0”,......所以我用“”重命名了这些列。
for i, columns_old in enumerate(df.columns.levels):
columns_new = np.where(columns_old.str.contains('Unnamed'), '', columns_old)
df.rename(columns = dict(zip(columns_old, columns_new)), level = i, inplace = True)
替换“未命名”列后的数据:
Name                          Address                              Other Address Details

First Name Surname State City Pincode Landmark

Gaurav Tiwari Maharashtra Pune 411001 Lane-C
Pooja Mishal Maharashtra Sawantwadi 416510 Saliwada
我不知何故觉得以这种方式处理这个多级数据有点不明智。
  • 如果我想检索姓氏/名字等列数据,那么我必须写:
    df['']['Surname']      // don't want to do [''].

    df['']['First Name'] // don't want to do [''].
    我想解决这些列:
     df['Name']['First Name']

    df['Name']['Surname']
  • 如果我以这种方式处理我的数据,数据也会被填充为空白列(''),这从长远来看是不好的。有没有更好的方法在 python 中写入这些数据,同时保留与初始数据相同的模式(查看第一个图像,即 Excel 数据)?
  • 最佳答案

    使用 MultiIndex.to_frame 新品 DataFrame来自列名,因此可以替换 Unnamed Series.mask 中的缺失值并向前填充缺失值,最后创建 MultiIndex来自 MultiIndex.from_frame :

    df = pd.read_csv('(path)', header = [0, 1])

    print (df.columns)
    MultiIndex([( 'Name', 'First Name'),
    ( 'Unnamed:1_level_0', 'Surname'),
    ( 'Address', 'State'),
    ( 'Unnamed: 3_level_0', 'City'),
    ('Other Address Details', 'Pincode'),
    ( 'Unnamed: 5_level_0', 'Landmark')],
    )

    df1 = df.columns.to_frame()
    df1.columns = ['lvl1','lv2']
    df1['lvl1'] = df1['lvl1'].mask(df1['lvl1'].str.contains('Unnamed')).ffill()

    df.columns = pd.MultiIndex.from_frame(df1)
    print (df.columns)
    MultiIndex([( 'Name', 'First Name'),
    ( 'Name', 'Surname'),
    ( 'Address', 'State'),
    ( 'Address', 'City'),
    ('Other Address Details', 'Pincode'),
    ('Other Address Details', 'Landmark')],
    names=['lvl1', 'lv2'])

    关于python - 如何使用 Python Pandas 处理多级数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67404297/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com