Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧中的字符串转换为列表的最佳方式是什么?_Python_String_Pandas_List - Fatal编程技术网

Python 将数据帧中的字符串转换为列表的最佳方式是什么?

Python 将数据帧中的字符串转换为列表的最佳方式是什么?,python,string,pandas,list,Python,String,Pandas,List,基本上,我有一个数据框架,其中的列表已经作为字符串读入,我想将它们转换回列表 下面显示了我目前正在做的事情,但我仍在学习,我觉得必须有一种更好的(更有效的/类似蟒蛇的)方法来实现这一点。任何帮助/建设性的批评都将不胜感激 import pandas as pd import ast df = pd.DataFrame(data=['[-1,0]', '[1]', '[1,2]'], columns = ['example']) type(df['example'][0]) >> s

基本上,我有一个数据框架,其中的列表已经作为字符串读入,我想将它们转换回列表

下面显示了我目前正在做的事情,但我仍在学习,我觉得必须有一种更好的(更有效的/类似蟒蛇的)方法来实现这一点。任何帮助/建设性的批评都将不胜感激

import pandas as pd
import ast

df = pd.DataFrame(data=['[-1,0]', '[1]', '[1,2]'], columns = ['example'])
type(df['example'][0])
>> str

n = df.shape[0]
temp = []
temp2 = []

for i in range(n):
    temp = (ast.literal_eval(df['example'][i]))
    temp2.append(temp)

df['new_col_lists'] = temp2
type(df['new_col_lists'][0])
>> list

也许你可以用一张地图:

df['example'] = df['example'].map(ast.literal_eval)

对于pandas,几乎总是有一种方法可以避免for循环。

您可以使用
。apply

Ex:

import pandas as pd
import ast

df = pd.DataFrame(data=['[-1,0]', '[1]', '[1,2]'], columns = ['example'])
df['example'] = df['example'].apply(ast.literal_eval)
print( type(df['example'][0]) )
<type 'list'>
输出:

import pandas as pd
import ast

df = pd.DataFrame(data=['[-1,0]', '[1]', '[1,2]'], columns = ['example'])
df['example'] = df['example'].apply(ast.literal_eval)
print( type(df['example'][0]) )
<type 'list'>

您可以将apply与lambda一起使用,lambda可以拆分和转换字符串:

df['new_col_lists'] = df['example'].apply(lambda s: [int(v.strip()) for v in s[1:-1].split(',')])

如果需要,请使用float cast而不是int。

如果这是可行的,并且您只是希望优化,我建议您改为发帖以感谢@brucewayn,这很好,我将记住这一点,以备将来使用!像这样的东西正是我想要的,谢谢!下面还有另一个答案,它使用
.apply()
而不是
.map()
。在这种情况下它们可以互换吗?还是一个比另一个好呢?我发现这篇文章解释了
.map()
.apply()
之间的区别,以防有人看到这篇文章后想知道同样的事情:再次感谢!