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()
之间的区别,以防有人看到这篇文章后想知道同样的事情:再次感谢!