1

我已经使用 read_html 和 pandas 库阅读了一个网址“ https://simple.wikipedia.org/wiki/List_of_U.S._states ”:

在此处输入图像描述

但是我在标题单元格合并中遇到问题,如下图标记

在此处输入图像描述

我想将标题的行或列合并到它们以实现上述格式和相同的格式以保存在 csv 文件中。

表示使用 to_csv 存储在 CSV 文件中的相同格式https://simple.wikipedia.org/wiki/List_of_U.S._states

4

1 回答 1

1

所以首先,起始 df 是一个列表。要将其制成数据框,您可以使用:

df=df.concat(df)
type(df) # Returns pandas.core.frame.DataFrame
type(df.columns) # Returns pandas.core.indexes.multi.MultiIndex

您的标头是一个多索引对象。这是一些参考https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.MultiIndex.html。当我们打印列时,我们得到:

print(df.columns)

输出:

MultiIndex([(                        'Name',                         'Name'),
        (      'postal abbreviation[1]',       'postal abbreviation[1]'),
        (                      'Cities',                      'Capital'),
        (                      'Cities',                   'Largest[5]'),
        (  'Established[upper-alpha 1]',   'Established[upper-alpha 1]'),
        ('Population[upper-alpha 2][3]', 'Population[upper-alpha 2][3]'),
        (               'Total area[4]',                          'mi2'),
        (               'Total area[4]',                          'km2'),
        (                'Land area[4]',                          'mi2'),
        (                'Land area[4]',                          'km2'),
        (               'Water area[4]',                          'mi2'),
        (               'Water area[4]',                          'km2'),
        (              'Numberof Reps.',               'Numberof Reps.')],
       )

我们的专栏有两个层次:

print(df.levels)

输出:

[['Cities', 'Established[upper-alpha 1]', 'Land area[4]', 'Name', 'Numberof Reps.', 'Population[upper-alpha 2][3]', 'Total area[4]', 'Water area[4]', 'postal abbreviation[1]'], ['Capital', 'Established[upper-alpha 1]', 'Largest[5]', 'Name', 'Numberof Reps.', 'Population[upper-alpha 2][3]', 'km2', 'mi2', 'postal abbreviation[1]']]

您可以将列标题替换为:

Index=[('Name', ''),('postal abbreviation[1]',''),('Cities',                    'Capital'),('Cities','Largest[5]'), ('Established[upper-alpha 1]',''),('Population[upper-alpha 2][3]', ''),('Total area[4]','mi2'),('Total area[4]', 'km2'),('Land area[4]','mi2'),('Land area[4]','km2'),('Water area[4]','mi2'),('Water area[4]','km2'),('Numberof Reps.',' ')]
index = pd.MultiIndex.from_tuples(Index)#To make it into a MultiIndex item
df.columns=index

所以现在如果你运行命令

print(df)

你会得到你想要的结果!

在此处输入图像描述

于 2019-12-07T23:47:53.980 回答