python - Pandas:将 JSON 列表值拆分为新列

标签 python json pandas dataframe

我使用 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 列?

最佳答案

您可以使用split通过 strip 删除 [] :

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/

相关文章:

python - Pandas - 找到第一次出现

python - Pandas Dataframe 的向量化计算

Linux 上科学家的 Python 发行版

python - 在第一个测试完成且测试失败后,Python和Unittest打开第二个浏览器

javascript - Json 数组对象访问

python - 如何为自定义类实现默认序列化方法?

python - Django 唯一约束

python - scipy.minimize 似乎不遵守约束

javascript - 来自 .js 文件的 JSON

python - 合并多个文件并通过附加文件名保存它们