如何去除Series中的空列表,同时将非空列表改成字符串形式?

问题描述

下面是一个例子

df=pd.DataFrame({'AAA','BBBB','CCC'},columns=['fruit'])
a=pd.Series({'0':'A','1':'B','2':'C'})
dict_a={}
for x in a:
dict_a[x]=''.join('%s' %a for a in filter(None,df['fruit'].str.findall(r'.*{}.*'.format(x))))

我得到的字典值是列表形式:['AAA'],['BBB'] 但我的理想形式是:'AAA','BBB' 如何去除Series中的空列表,同时将非空列表改成字符串形式,我想用它作为字典的值?

解决方法

要仅获取匹配项的第一个元素,请获取索引 0 处的列表项:

for x in a:
    dict_a[x] = ''.join(m[0] for m in filter(None,df['fruit'].str.findall(r'.*{}.*'.format(x))))

# `dict_a` is:
{'A': 'AAA','B': 'BBBB','C': 'CCC'}

这将仅采用 findall 的第一个结果,如果数据框中有多个匹配项或数据框中每行有多个匹配项,则可能无法给出您想要的结果。

(另外,不要在循环中重复使用系列名称 a。我已将其更改为 m。)