Python 创建作为对象存储在单个列中的列表列表
我将列表作为对象存储在一列数据中。我需要从这些“列表”中创建一个列表,但它们未被识别为列表 我曾尝试将列转换为列表、连接、创建一个系列,但结果未被视为列表 我所拥有的:Python 创建作为对象存储在单个列中的列表列表,python,dataframe,Python,Dataframe,我将列表作为对象存储在一列数据中。我需要从这些“列表”中创建一个列表,但它们未被识别为列表 我曾尝试将列转换为列表、连接、创建一个系列,但结果未被视为列表 我所拥有的: code1 Out[83]: 0 ['hair', 'body'] 1 ['hair', 'body'] 2 ['hair', 'body'] Name: personal_interests, dtype: object code1.tolist() Out[79]: ["['hair', 'body']
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']]
以下解决方案计算字符串内的列表并将其附加到新的空列表:
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']"]
所以现在,如果我们对所有元素应用literal\u eval,然后将其转换为list,我们就会得到所需的结果
df['a'].apply(literal_eval).tolist()
#[['hair', 'body'], ['hair', 'body']]
可能是字符串,而不是列表,但它在屏幕上看起来像列表。我用单元格中的列表创建了DF,tolist()
为我提供了列表列表。太好了,谢谢你的指点,我不熟悉ast包,但我现在一定要看一下。谢谢你,阿曼布!不客气。我还试图重现这个问题,似乎原始元素将被创建为字符串而不是列表。类似这样的东西:df=pd.DataFrame({'a':[“['hair','body']”,“['hair','body']”])
,有了这样一个df
我可以重现这个问题。但是,如果这些最初是列表,那么它会给出预期的输出。您还可以展示数据框是如何创建的吗?它是以.csv格式创建并导入的。导入时可能有一种方法将列视为列表。在pandas中,建议使用read\u csv
函数读取csv文件。首先,csv中的数据可能是字符串而不是列表。