我有一个数据框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']
答案 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']