Pandas使用实用技巧

Pandas使用使用技巧

1 列拆分成行

常见的需求是将某一列根据指定的分隔符拆分成多列。现有需求,根据指定的分隔符将其拆分为多行

例:

     A       B
      0  a       f
      1  b;c     h;g 
      2  d       k
      3  e       l
知识兔

现需要将其拆分为:

     A       B
      0  a       f
      1  b       h
      1  c       g 
      2  d       k
      3  e       l
知识兔

1.1 处理A列 

实现过程如下:

'A': ['a', 'b;c', 'd', 'e'], 'B': ['f', 'h;j', 'k', 'l']})
df
知识兔
     A    B0    a    f1    b;c    h;j2    d    k3    e    l

 将A列按照“;”分割,并展开为DataFrame,该效果由expand参数空值:

df_a = df['A'].str.split(';', expand=True)df_a    0    10    a    None1    b    c2    d    None3    e    None

 将df_a进行堆积:

df_a = df_a.stack()df_a0  0    a1  0    b   1    c2  0    d3  0    edtype: object

将内层索引重置为列并删除掉:

df_a = df_a.reset_index(level=1, drop=True)df_a0    a1    b1    c2    d3    edtype: object

重命名该Series,否则接下来合并会失败:

df_a.rename('A_split', inplace=True)df_a0    a1    b1    c2    d3    eName: A_split, dtype: object

1.2 处理列B

处理过程同列A,最后重命名后为:

df_b.rename('B_split', inplace=True)df_b0    f1    h1    j2    k3    lName: B_split, dtype: object

1.3 合并A_split和B_split

水平合并处理完成后的两列:

concat_a_b = pd.concat([df_a, df_b], axis=1)concat_a_b
A_split B_split0 a     f
1 b      h1 c     j2 d     k3 e      l

1.4 最后和原数据合并

将最终处理的数据和原数据根据索引进行合并:

df = df.join(concat_a_b, how='inner')df   A      B      A_split    B_split0    a      f      a          f1    b;c     h;j    b          h1    b;c     h;j    c          j2    d       k      d          k3    e       l      e          l

最后达到了想要的效果。

计算机