基本上,我有一个数据框,其中包含已作为字符串读取的列表,我想将它们转换回列表。
下面显示了我当前正在做的事情,但我仍在学习,并且觉得必须有一种更好的(更有效的/ 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
答案 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。