熊猫数据框:将列表的列转换为列表

时间:2020-08-15 07:23:53

标签: python pandas list dataframe

我有一个数据框df,其列为hashtags,这样:

df['hashtags']
>>>
0                                                       NaN
1                                                       NaN
2                                               ['COVID19']
3                                               ['COVID19']
4                         ['CoronaVirusUpdates', 'COVID19']
                                ...                        
132596    ['coronacrise', 'covid19', 'JN', 'NãoÉSóUmNúme...
132597                                          ['covid19']
132598                                ['corona', 'covid19']
132599                                                  NaN
132600                                          ['covid19']
Name: hashtags, Length: 132601, dtype: object

我想创建一个包含该列的所有列表元素(Nan除外)的列表。
我尝试通过以下方式列出列表:

li = df['hashtags'].tolist()

但是它将列表转换成字符串,最后得到一个字符串列表。 例如:

li[:5]
>>> 
[nan, nan, "['COVID19']", "['COVID19']", "['CoronaVirusUpdates', 'COVID19']"]

我对li[:5]的期望输出是:

['COVID19', 'COVID19', 'CoronaVirusUpdates', 'COVID19', 'coronavirus', 'covid19']

1 个答案:

答案 0 :(得分:2)

想法是首先通过Series.dropna删除缺失值,然后通过ast.literal_eval将列表repr转换为列表,并以列表理解方式展平嵌套列表:

df = pd.DataFrame({'hashtags':[np.nan, np.nan, 
                               "['COVID19']", "['COVID19']", 
                               "['CoronaVirusUpdates', 'COVID19']"]})

import ast

out = [y for x in df['hashtags'].dropna() for y in ast.literal_eval(x)]
print (out)
['COVID19', 'COVID19', 'CoronaVirusUpdates', 'COVID19']