Pandas使用实用技巧

Pandas实用使用技巧

1 列拆分成行

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

例:

df =     A       B
      0  a       f
      1  b;c     h;g 
      2  d       k
      3  e       l

现需要将其拆分为:

df =     A       B
      0  a       f
      1  b       h
      1  c       g 
      2  d       k
      3  e       l

1.1 处理A列 

实现过程如下:

df = pd.DataFrame({'A': ['a', 'b;c', 'd', 'e'], 'B': ['f', 'h;j', 'k', 'l']})
df
     A    B
0    a    f
1    b;c    h;j
2    d    k
3    e    l

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

df_a = df['A'].str.split(';', expand=True)
df_a

    0    1
0    a    None
1    b    c
2    d    None
3    e    None

 将df_a进行堆积:

df_a = df_a.stack()
df_a

0  0    a
1  0    b
   1    c
2  0    d
3  0    e
dtype: object

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

df_a = df_a.reset_index(level=1, drop=True)
df_a

0    a
1    b
1    c
2    d
3    e
dtype: object

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

df_a.rename('A_split', inplace=True)
df_a

0    a
1    b
1    c
2    d
3    e
Name: A_split, dtype: object

1.2 处理列B

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

df_b.rename('B_split', inplace=True)
df_b

0    f
1    h
1    j
2    k
3    l
Name: 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_split 0 a     f
1 b      h 1 c     j 2 d     k 3 e      l

1.4 最后和原数据合并

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

df = df.join(concat_a_b, how='inner')
df

   A      B      A_split    B_split
0    a      f      a          f
1    b;c     h;j    b          h
1    b;c     h;j    c          j
2    d       k      d          k
3    e       l      e          l

最后达到了想要的效果。

2 切片插入多行

常见的需求是在指定的位置插入一行或者一列。现有需求,在指定的位置插入多行或者多列:

df = pd.DataFrame({'Name': ['Tom', 'Jack', 'Steve', 'Ricky'], 'Age': [28,34,29,42]})

df
Out[4]: 
    Name  Age
0    Tom   28
1   Jack   34
2  Steve   29
3  Ricky   42

df1 = pd.DataFrame({'Name':['Anna', 'Susie'],'Age':[20,50]})

df1
Out[6]: 
    Name  Age
0   Anna   20
1  Susie   50

 df2 = pd.DataFrame({'Name':['Anna', 'Susie', 'Jhone'],'Age':[20, 50, 35]})

 df2
 Out[10]:

   Name  Age
0   Anna   20
1  Susie   50
2 Jhone 35

 2.1 将df1作为整体插入索引2的位置

通过numpy的insert方法实现数组重构,然后再将数组构造成需要的表格:

np.insert(df.values, 2, df1.values, axis=0)
Out[7]: 
array([['Tom', 28],
       ['Jack', 34],
       ['Anna', 20],
       ['Susie', 50],
       ['Steve', 29],
       ['Ricky', 42]], dtype=object)

可以观察到数据被插入到df索引2的位置。可以根据原来的列名直接构造DataFrame来实现需求:

pd.DataFrame(np.insert(df.values, 2, df1.values, axis=0), columns=df.columns)
Out[8]: 
    Name Age
0    Tom  28
1   Jack  34
2   Anna  20
3  Susie  50
4  Steve  29
5  Ricky  42

 2.2 将df2每一行分开插入到指定位置

通过numpy的insert方法实现数组重构,然后再将数组构造成需要的表格:

np.insert(df.values, (0, 1, 2), df2.values, axis=0)
Out[12]: 
array([['Anna', 20],
       ['Tom', 28],
       ['Susie', 50],
       ['Jack', 34],
       ['Jhone', 35],
       ['Steve', 29],
       ['Ricky', 42]], dtype=object)

可以观察到数据被插入到df索引0、1、2的位置。可以根据原来的列名直接构造DataFrame来实现需求:

pd.DataFrame(np.insert(df.values, (0, 1, 2), df2.values, axis=0), columns=df.columns)
Out[13]: 
    Name Age
0   Anna  20
1    Tom  28
2  Susie  50
3   Jack  34
4  Jhone  35
5  Steve  29
6  Ricky  42
原文地址:https://www.cnblogs.com/strivepy/p/11704595.html