python - 如何最好地将包含列表或元组的 Pandas 列提取到多个列中

标签 python pandas

<分区>

我不小心用指向错误副本的链接关闭了这个问题。这是正确的:Pandas split column of lists into multiple columns .

假设我有一个数据框,其中一列是列表(已知且长度相同)或元组,例如:

df1 = pd.DataFrame(
 {'vals': [['a', 'b', 'c', 'd'],['e','f','g','h']]}
)

即:

    vals
0   [a, b, c, d]
1   [e, f, g, h]

我想将“vals”中的值附加到单独的命名列中。我可以通过遍历行来笨拙地做到这一点:

for i in range(df1.shape[0]):
   for j in range(0,4):
      df1.loc[i, 'vals_'+j] = df1.loc[i, 'vals'] [j]

结果如愿:

    vals            vals_0  vals_1  vals_2  vals_3
0   [a, b, c, d]    a       b       c       d 
1   [e, f, g, h]    e       f       g       h

是否有更简洁(矢量化)的方式?我尝试使用 [] 但出现错误。

   for j in range (0,4)
       df1['vals_'+str(j)] = df1['vals'][j]

给出:

ValueError: Length of values does not match length of index

看起来 Pandas 正在尝试将 [] 运算符应用于系列/数据框而不是列内容。

最佳答案

你可以使用assign, apply, pd.Series:

df1.assign(**df1.vals.apply(pd.Series).add_prefix('val_'))

获取更多数据的更快方法是将 .values 和 tolist() 与数据框构造函数一起使用:

df1.assign(**pd.DataFrame(df1.vals.values.tolist()).add_prefix('val_'))

输出:

           vals val_0 val_1 val_2 val_3
0  [a, b, c, d]     a     b     c     d
1  [e, f, g, h]     e     f     g     h

关于python - 如何最好地将包含列表或元组的 Pandas 列提取到多个列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47999418/

相关文章:

python - 随机打乱 DataFrame 列表中的列

Python iloc 索引之间的区别

python ast vs json for str to dict translation

python - (PyQt 和 PySide)QFileDialog.getExistingDirectory 在 Windows 上不起作用

python - Pandas:将组标题移动到新列

python - 从指定级别按多个值切片 MultiIndex DataFrame

python - 计算 Pandas 的旅行时间

python - 在 Python 包中混合函数和子包

python - PyMongo 游标迭代

python - 使用 float 索引合并两个 Pandas 数据帧