我将列表存储为一列数据中的对象。我需要从这些“列表”中创建一个列表,但无法将它们识别为列表。
我曾尝试将列转换为列表,进行连接,创建系列,但结果未视为列表。
我所拥有的:
code1
Out[83]:
0 ['hair', 'body']
1 ['hair', 'body']
2 ['hair', 'body']
Name: personal_interests, dtype: object
code1.tolist()
Out[79]: ["['hair', 'body']", "['hair', 'body']", "['hair', 'body']"]
我需要什么:
example = [['hair', 'body'],
['hair', 'body'],
['hair', 'body']]
example
Out[94]: [['hair', 'body'], ['hair', 'body'], ['hair', 'body']]
答案 0 :(得分:1)
以下解决方案评估字符串中的列表,并将其追加到新的空列表中:
from ast import literal_eval
l1 = ["['hair', 'body']", "['hair', 'body']", "['hair', 'body']"]
l2 = []
for i in l1:
l2.append(literal_eval(i))
l2
#[['hair', 'body'], ['hair', 'body'], ['hair', 'body']]
我试图通过将列表作为字符串而不是纯列表传递来重现该问题:
df= pd.DataFrame({'a':["['hair', 'body']", "['hair', 'body']"]})
df
a
0 ['hair', 'body']
1 ['hair', 'body']
您会注意到,数据框中的元素不会显示为字符串,而是显示为普通列表。当我将系列转换为列表时,元素将按预期方式以字符串表示:
df['a'].tolist()
#["['hair', 'body']", "['hair', 'body']"]
所以现在,如果我们对所有元素apply
literal_eval然后转换为列表,我们将获得所需的结果。
df['a'].apply(literal_eval).tolist()
#[['hair', 'body'], ['hair', 'body']]