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 f1 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
最后达到了想要的效果。