Pandas列替换多个特殊字符并插入新字符

dphi5xsq  于 2023-04-28  发布在  其他
关注(0)|答案(3)|浏览(102)

我有一个pandas dataframe像下面

Country_list

{'INDIA': '98.31%', 'ASEAN': '1.69%'}
{'KOREA': '100.0%'}
{'INDIA': '95.00%', 'ASEAN': '2.50%','ANZ': '2.50%'}
{'INDIA': '95.00%', 'ASEAN': '2.50%','ANZ': '1.25%','KOREA': '1.25%'}

我想做下面的
a)将所有数字和特殊字符替换为“”(不含空格)
B)在不同区域名称之间插入新字符-逗号
我尝试了下面的方法,但这看起来并不高效或优雅

df['Country_list'] = df['Country_list'].str.replace(r":",'', regex=True).str.replace(r"%", '', regex=True).str.replace(r"{",'', regex=True).str.replace(r"}",'', regex=True)

我希望我的输出像下面这样

INDIA,ASEAN
KOREA
INDIA,ASEAN,ANZ
INDIA,ASEAN,ANZ,KOREA
llew8vvj

llew8vvj1#

如果需要通过,连接字典的键,将字符串转换为字典并在列表解析中连接键:

import ast

df['Country_list'] = [','.join(ast.literal_eval(x).keys()) for x in df['Country_list']]
print (df)
            Country_list
0            INDIA,ASEAN
1                  KOREA
2        INDIA,ASEAN,ANZ
3  INDIA,ASEAN,ANZ,KOREA

替代解决方案:

import ast

f = lambda x: ','.join(ast.literal_eval(x).keys())
df['Country_list'] = df['Country_list'].apply(f)
xwbd5t1u

xwbd5t1u2#

如果你有字典的字符串表示,你可以使用正则表达式extractall,然后groupby.agg

df['Country_list'] = (df['Country_list'].str.extractall("'([^']+)':")[0]
                      .groupby(level=0).agg(','.join)
                      )

输出:

Country_list
0            INDIA,ASEAN
1                  KOREA
2        INDIA,ASEAN,ANZ
3  INDIA,ASEAN,ANZ,KOREA

为了好玩,另一个基于点积的(黑客)解决方案:

import ast
tmp = pd.json_normalize(df['Country_list'].apply(ast.literal_eval))

df['Country_list'] = tmp.notna().dot(tmp.columns+',').str[:-1]

输出:

Country_list
0            INDIA,ASEAN
1                  KOREA
2        INDIA,ASEAN,ANZ
3  INDIA,ASEAN,KOREA,ANZ
h7wcgrx3

h7wcgrx33#

你可以试试这个方法:

print(df['Country_list'].apply(lambda x: ','.join(x.keys())))

输出:

0              INDIA,ASEAN
1                    KOREA
2          INDIA,ASEAN,ANZ
3    INDIA,ASEAN,ANZ,KOREA

相关问题