将数据框列拆分为具有特定名称的多列

时间:2021-01-29 14:24:24

标签: python pandas dataframe split

我正在尝试将数据框列拆分为多列,如下所示:

  1. 总共有三列。两个应在新数据框中重命名,而第三个应拆分为新列。
  2. 使用特定字符(例如“:”)进行拆分
  3. 需要拆分的列可以有不同数量的“:”拆分。因此,不同行的新列可以不同,某些行的某些列值为 NULL。没关系。
  4. 每个随后形成的列都有一个特定的名称。可以形成的最大列数是已知的。
  5. 有四个数据框。每个都有相同格式的列,必须拆分。

我遇到了以下解决方案,但由于上述原因它们不起作用:

  1. Link

    pd.concat([df[[0]], df[1].str.split(', ', expand=True)], axis=1)

    • 这会创建名称为 0,1,2 的列...我需要新列具有特定名称。
  2. Link

    df = df.apply(lambda x:pd.Series(x))

    • 这不会改变数据框。不明白为什么。
  3. Link

    df['command'], df['value'] = df[0].str.split().str

    • 此处正确重命名了列名称,但这需要事先知道将形成多少列。就我而言,它对于每个数据帧都是动态的。对于行,拆分成功地将 NULL 值放入额外的列中。但是对另一个数据帧使用相同的代码会产生错误,指出键的数量应该相同。

我无法对这些答案发表评论,因为我是这个社区的新成员。如果有人能帮助我了解如何实现我的目标,我将不胜感激 - 即:在将新生成的列重命名为预定义名称的同时,动态使用相同的代码在多种情况下将一列拆分为多个用于不同数据帧的列。

例如:

数据框 1:

    Col1    Col2            Col3
0   A       A:B:C           A
1   A       A:B:C:D:E       A
2   A       A:B             A

数据框 2:

    Col1    Col2            Col3
0   A       A:B:C           A
1   A       A:B:C:D         A
2   A       A:B             A

输出应该是: 新数据框 1:

    Col1   ColA   ColB   ColC   ColD   ColE   Col3
0   A      A      B      C      NaN    NaN    A
1   A      A      B      C      D      E      A
2   A      A      B      NaN    NaN    NaN    A

新数据框 2:

    Col1   ColA   ColB   ColC   ColD   ColE   Col3
0   A      A      B      C      NaN    NaN    A
1   A      A      B      C      D      NaN    A
2   A      A      B      NaN    NaN    NaN    A

(如果ColE不在,那也没关系。)

在此之后,我会将这些数据帧连接成一个,在那里我需要针对 Col1 和 Col3 组合的单个数据帧的所有 ColA 到 ColE 的计数。所以,我们需要牢记这一点。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

columns = df.Col2.max().split(':')
#['A', 'B', 'C', 'D', 'E']

new = df.Col2.str.split(":", expand = True)
new.columns = columns
new = new.add_prefix("Col")

df.join(new).drop("Col2", 1)
#  Col1 Col3 ColA ColB  ColC  ColD  ColE
#0    A    A    A    B     C  None  None
#1    A    A    A    B     C     D     E
#2    A    A    A    B  None  None  None