3 回答
TA贡献1829条经验 获得超9个赞
apply与列表理解一起使用,将列表的每个值拆分,为floats并强制转换为s:
lst = ['55.7492,12.5405', '55.7492,12.5405', '55.7492,12.5406', '55.7492,12.5406']
df = pd.DataFrame({'column':[lst,lst]})
df['locations'] = df['column'].apply(lambda x: [list(map(float,y.split(','))) for y in x])
print (df)
column \
0 [55.7492,12.5405, 55.7492,12.5405, 55.7492,12....
1 [55.7492,12.5405, 55.7492,12.5405, 55.7492,12....
locations
0 [[55.7492, 12.5405], [55.7492, 12.5405], [55.7...
1 [[55.7492, 12.5405], [55.7492, 12.5405], [55.7...
TA贡献1844条经验 获得超8个赞
我认为最有效的方法是使用ast.literal_eval():
import ast
y = [list(ast.literal_eval(x)) for x in lst]
现在,如果您有一列包含要转换为列表列表的字符串列表,那么您可以使用:
df['new_col'] =df['col'].apply(lambda x: [list(ast.literal_eval(y)) for y in x ])
TA贡献1873条经验 获得超9个赞
您应该分配列表理解的输出:
for col in columns: # where columns is a list of your columns data[col] = [[x] for x in data[col]]
或者只是在一个列上,这样做就足够了:
data_train['locations'] = [map(int,x.split()) for x in data_train['locations']]
因为data['column']
是一个元素列表,当你遍历它时,stuff
每次迭代都会有一个不同的行元素,所以不是一个列表。
添加回答
举报