如何将pandas数据框中的字符串转换为列表?

3
基本上我有一个数据框,其中包含读入为字符串的列表,我想将它们转换回列表。以下是我目前正在进行的操作,但我仍在学习,并且感觉必须有更好(更有效/Pythonic)的方法来处理此问题。任何帮助/建设性批评将不胜感激!
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

如果这个程序已经可以正常运行,而你只是想要进行优化,我建议你去 CodeReview 发帖寻求帮助。 - BruceWayne
谢谢您,@BruceWayne,我知道了,以后会记住的! - Sean
3个回答

3
也许你可以使用地图:
df['example'] = df['example'].map(ast.literal_eval)

使用pandas,几乎总有一种避免使用for循环的方法。

像这样的东西正是我正在寻找的,谢谢!下面还有另一个答案,它使用.apply()而不是.map()。在这种情况下,它们是否可以互换?或者其中一个比另一个更好? - Sean
1
我发现了这篇文章,它解释了.map().apply()之间的区别,如果有人看到这篇文章并且也想知道这个问题的答案,请参考以下链接:https://dev59.com/R2Ij5IYBdhLWcg3w4Izt再次感谢! - Sean

2
你可以使用 .apply 方法。 例子:
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'>

0
您可以使用 lambda 函数将字符串拆分和转换,然后再使用 apply 函数:
df['new_col_lists'] = df['example'].apply(lambda s: [int(v.strip()) for v in s[1:-1].split(',')])

如有需要,请使用浮点数转换而非整数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接