当前位置: 首页 > 知识库问答 >
问题:

如何最好地将包含列表或元组的Pandas列提取为多列[重复]

公羊新
2023-03-14

我不小心用一个到错误副本的链接关闭了这个问题。下面是正确的:熊猫将列表的一列拆分成多列。

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

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

ie:

    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试图将[]操作符应用于series/dataframe,而不是列内容。

共有2个答案

欧阳何平
2023-03-14

可以将序列初始值设定项应用于 vals,然后add_prefix以获取要查找的列名称。然后连接到原始输出以获得所需的输出:

pd.concat([df1.vals, df1.vals.apply(pd.Series).add_prefix("vals_")], axis=1)

           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
万俟靖
2023-03-14

您可以使用分配应用pd.Series

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

获取更多数据的更快方法是使用。values和tolist()与dataframe构造函数:

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中是否有任何内置函数可以将其转换为: 这可以是一个简单的程序。但是我只是对Python中存在这种内置函数感到好奇。 问题答案: 内置功能几乎可以满足您的需求: 唯一的区别是您得到元组而不是列表。您可以使用将它们转换为列表

  • 问题内容: 我有一列如下所示的熊猫: 我需要将列表的此列分为2列,并使用。 问题答案: 您可以使用与构造函数通过转换为创建通过使用: 对于新的DataFrame: 解决方案apply(pd.Series)非常慢:

  • 问题内容: 说我有以下pandas数据框: 我如何“堆叠”“ b”列中的列表以将其转换为数据框: 问题答案: 更新: 通用矢量化方法-也适用于多列DF: 假设我们有以下DF: 解: 设定: 向量化NumPy方法: 旧答案: 尝试这个: 或@Boud提供的更好的解决方案:

  • 问题内容: 我是Python的新手,需要将列表转换为字典。我知道我们可以将元组列表转换为字典。 这是输入列表: 并且我想将此列表转换为元组列表(或直接转换为字典),如下所示: 我们如何在Python中轻松做到这一点? 问题答案: 您想一次将三个项目分组吗? 您想一次分组N个项目吗?