我使用 Pandas 将 CSV 加载到以下 DataFrame:
value values
0 56.0 [-0.5554548,10.0748005,4.232949]
1 72.0 [-0.1953888,0.15093994,-0.058532715]
...
现在我想用 3 个新列替换“values”列,如下所示:
value values_a values_b values_c
0 56.0 -0.5554548 10.0748005 4.232949
1 72.0 -0.1953888 0.15093994 -0.058532715
...
如何将列表拆分为 3 列?
最佳答案
df1 = df.pop('values').str.strip('[]').str.split(',',expand=True).astype(float)
df[['values_a', 'values_b', 'values_c']] = df1
如果没有 NaN
的解决方案:
L = [x.split(',') for x in df.pop('values').str.strip('[]').values.tolist()]
df[['values_a', 'values_b', 'values_c']] = pd.DataFrame(L).astype(float)
首先将列转换为列表,然后使用 DataFrame
构造函数的解决方案:
import ast
s = df.pop('values').apply(ast.literal_eval)
df[['values_a', 'values_b', 'values_c']] = pd.DataFrame(s.values.tolist()).astype(float)
类似:
df = pd.read_csv(file converters={'values':ast.literal_eval})
print (df)
value values
0 56.0 [-0.5554548, 10.0748005, 4.232949]
1 72.0 [-0.1953888, 0.15093994, -0.058532715]
df1 = pd.DataFrame(df.pop('values').tolist()).astype(float)
df[['values_a', 'values_b', 'values_c']] = df1
最终:
print (df)
value values_a values_b values_c
0 56.0 -0.555455 10.074801 4.232949
1 72.0 -0.195389 0.150940 -0.058533
编辑:
如果某些列中可能有超过 3 个值,则不可能分配给 3 个新列。解决方案是使用join
:
df = df.join(df1.add_prefix('val'))
print (df)
value val0 val1 val2
0 56.0 -0.555455 10.074801 4.232949
1 72.0 -0.195389 0.150940 -0.058533
关于python - Pandas:将 JSON 列表值拆分为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49107520/