将pandas数据框中的字符串转换为列表的最佳方法是什么?

时间:2018-08-25 15:24:47

标签: python string pandas list

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

下面显示了我当前正在做的事情,但我仍在学习,并且觉得必须有一种更好的(更有效的/ Python风格的)方法来解决此问题。任何帮助/建设性的批评将不胜感激!

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

3 个答案:

答案 0 :(得分:3)

也许您可以使用地图:

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

对于熊猫来说,几乎总有一种避免for循环的方法。

答案 1 :(得分: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'>

答案 2 :(得分:0)

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

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

如果需要,请使用float代替int。