【问题标题】:Split column with separator带分隔符的拆分列
【发布时间】:2020-07-17 15:41:02
【问题描述】:
| A             | B
| a;b;c         | 1;2;3
| a;b;c;d       | 1

为了拆分列,我正在使用

new = df["A"].str.split(";", n=5, expand=True).
df['A1'] = new[0]
df['A2'] = new[1]
df['A3'] = new[2]
df['A4'] = new[3]
df.drop(columns=["A"], inplace=True)

df['B1'] = new[0]
df['B2'] = new[1]
df['B3'] = new[2]
df.drop(columns=["B"], inplace=True)

还有其他替代方法可以让我不需要计算每列中的数据数量吗? 我仍然需要输出类似于:

| A1| A2| A3| A4| B1| B2| B3
| a | b | c |   | 1 | 2 | 3
| a | b | c | d | 1 |   | 

谢谢!

【问题讨论】:

    标签: python pandas split


    【解决方案1】:

    无需指定拆分次数,因为默认情况下会在分隔符的每个实例上拆分。结果将是一个 DataFrame,其中列是 RangeIndex,因此添加列作为前缀。循环遍历每个系列(因为它是 Series.str.split),然后 concat 加入结果。

    df = pd.concat([df[col].str.split(';', expand=True).add_prefix(col) for col in df.columns],
                   axis=1)
    
      A0 A1 A2    A3 B0    B1    B2
    0  a  b  c  None  1     2     3
    1  a  b  c     d  1  None  None
    

    请注意,'B' 列包含字符串 '1',所以如果您想使用数字 pd.to_numeric

    numerics = df.columns[df.columns.str.startswith('B')]
    df[numerics] = df[numerics].apply(pd.to_numeric, errors='coerce')
    
      A0 A1 A2    A3  B0   B1   B2
    0  a  b  c  None   1  2.0  3.0
    1  a  b  c     d   1  NaN  NaN
    

    【讨论】:

    • 如果我不想在每个列上添加前缀怎么办?例如,我有一个名为 C 的列,我不需要拆分它,我不希望它更改为 C1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多