Pandas从需要解析和匹配的项列表中创建数据帧

2024-04-29 20:16:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个项目和国家状态的列表

res = [('63(I)[PARA.8]','AFGHANISTAN Y ARGENTINA Y AUSTRALIA Y BELGIUM Y BOLIVIA Y BRAZIL N BYELORUSSIAN SSR Y CANADA Y CHILE Y CHINA A COLOMBIA Y COSTA RICA Y CUBA A CZECHOSLOVAKIA Y DENMARK Y DOMINICAN REPUBLIC A ECUADOR Y EGYPT Y EL SALVADOR Y ETHIOPIA Y FRANCE Y GREECE Y GUATEMALA  HAITI Y HONDURAS Y ICELAND A INDIA Y IRAN Y IRAQ Y LEBANON N LIBERIA Y LUXEMBOURG Y MEXICO Y NETHERLANDS Y NEW ZEALAND Y NICARAGUA Y NORWAY Y PANAMA Y PARAGUAY Y PERU Y PHILIPPINE REPUBLIC N POLAND Y SAUDI ARABIA Y SWEDEN Y SYRIA Y TURKEY N UKRAINIAN SSR Y UNION OF SOUTH AFRICA N USSR Y UNITED KINGDOM Y UNITED STATES Y URUGUAY A VENEZUELA N YUGOSLAVIA'),
 ('63(I)[PARA.7]',
  'AFGHANISTAN Y ARGENTINA Y AUSTRALIA Y BELGIUM Y BOLIVIA Y BRAZIL N BYELORUSSIAN SSR Y CANADA Y CHILE Y CHINA A COLOMBIA Y COSTA RICA Y CUBA A CZECHOSLOVAKIA Y DENMARK Y DOMINICAN REPUBLIC A ECUADOR Y EGYPT Y EL SALVADOR Y ETHIOPIA Y FRANCE Y GREECE Y GUATEMALA  HAITI Y HONDURAS Y ICELAND A INDIA Y IRAN Y IRAQ Y LEBANON N LIBERIA Y LUXEMBOURG Y MEXICO Y NETHERLANDS Y NEW ZEALAND Y NICARAGUA Y NORWAY Y PANAMA Y PARAGUAY Y PERU Y PHILIPPINE REPUBLIC N POLAND Y SAUDI ARABIA Y SWEDEN Y SYRIA Y TURKEY N UKRAINIAN SSR Y UNION OF SOUTH AFRICA N USSR Y UNITED KINGDOM Y UNITED STATES Y URUGUAY A VENEZUELA N YUGOSLAVIA'),
 ('63(I)[PARA.6]',
  'AFGHANISTAN Y ARGENTINA Y AUSTRALIA Y BELGIUM Y BOLIVIA Y BRAZIL N BYELORUSSIAN SSR Y CANADA Y CHILE Y CHINA A COLOMBIA Y COSTA RICA Y CUBA A CZECHOSLOVAKIA Y DENMARK Y DOMINICAN REPUBLIC A ECUADOR Y EGYPT Y EL SALVADOR Y ETHIOPIA Y FRANCE Y GREECE Y GUATEMALA  HAITI Y HONDURAS Y ICELAND A INDIA Y IRAN Y IRAQ Y LEBANON N LIBERIA Y LUXEMBOURG Y MEXICO Y NETHERLANDS Y NEW ZEALAND Y NICARAGUA Y NORWAY Y PANAMA Y PARAGUAY Y PERU Y PHILIPPINE REPUBLIC N POLAND Y SAUDI ARABIA Y SWEDEN Y SYRIA Y TURKEY N UKRAINIAN SSR Y UNION OF SOUTH AFRICA N USSR Y UNITED KINGDOM Y UNITED STATES Y URUGUAY A VENEZUELA N YUGOSLAVIA'),
 ('99(I)', 'No Data'),
 ('50(I)', 'No Data')]

如何使用这些列创建数据帧

columns = ['Country','63(I)[PARA.8]','63(I)[PARA.7]','63(I)[PARA.6]','99(I)','50(I)']
dfte = pd.DataFrame(columns=columns)
dfte

在“国家”列中映射国家时,“Y”、“N”、“A”或“nan”将填充到单元格中。“无数据”是指第99(I)栏和;50(I)将为空

Country      63(I)[PARA.8]  63(I)[PARA.7]   63(I)[PARA.6]   99(I)   50(I)
AFGHANISTAN      Y               Y               Y
ARGENTINA        Y               Y               Y
AUSTRALIA        Y               Y               Y
...

Tags: 国家unitedbrazilchinachilecolombiassrcanada
1条回答
网友
1楼 · 发布于 2024-04-29 20:16:34

困难的部分是解析国家和代码列表(A、N或Y)

  • 一些国家有嵌入式空间(如萨尔瓦多)
  • 危地马拉没有代码(所以我使用了“?”)

首先,编写一个函数将每个元组转换为一个系列。“代码”是A、N或Y。其他任何内容都是国家名称(部分)

def raw_data_to_series(xs):
    
    name, values = xs
    
    if values == 'No Data':
        return pd.Series(dtype='object').rename(name)

    values = values.replace('  ', ' ').split(' ')

    country = ''
    results = dict()
    
    for x in values:
        if x == 'GUATEMALA':
            results[x] = '?'
            country = ''
        elif country == '':
            country = x
        elif x in {'A', 'N', 'Y'}:
            results[country] = x
            country = ''
        else:
            country = country + ' ' + x
    
    return pd.Series(results).rename(name)

现在,我们只需将res的每个元素传递给函数(使用列表理解):

pd.concat( [raw_data_to_series(r) for r in res], axis=1)


# first 10 lines
                 63(I)[PARA.8] 63(I)[PARA.7] 63(I)[PARA.6] 99(I) 50(I)
AFGHANISTAN                  Y             Y             Y   NaN   NaN
ARGENTINA                    Y             Y             Y   NaN   NaN
AUSTRALIA                    Y             Y             Y   NaN   NaN
BELGIUM                      Y             Y             Y   NaN   NaN
BOLIVIA                      Y             Y             Y   NaN   NaN
BRAZIL                       N             N             N   NaN   NaN
BYELORUSSIAN SSR             Y             Y             Y   NaN   NaN
CANADA                       Y             Y             Y   NaN   NaN
CHILE                        Y             Y             Y   NaN   NaN
CHINA                        A             A             A   NaN   NaN

相关问题 更多 >