Pandas(杂):字符串拆分及合并

pandas处理表格时,字符串列的拆分及合并操作,类似于excel中的分列

1.根据分隔符将一列成多列; 2.将多列进行合并

分列

参考api介绍: Series.str.split()

该方法支持正则表达式

处理高德Poi数据时发现有一列typename是这样的:

  • 汽车服务;汽车服务相关;汽车服务相关
  • 生活服务;人才市场;人才市场
  • 餐饮服务;中餐厅;中餐厅

分别代表大中小类别,因此通过如下代码切分

  • expand=True表示将拆分的字符串展开为单独的列
  • n指定拆分的分隔符个数,默认0/-1全部拆分
1
2
3
4
5
6
# 测试数据,原始df过大
df_sample = df.sample(500)
# 直接切分,预览结果发现得到五列,后两列大量为None,有的小类过细
df_sample['typename'].str.split(';', expand=True)
# 因此最终的切分代码
df_sample[['type1', 'type2', 'type3']] = df_sample['typename'].str.split(';', n=2, expand=True)

合并

参考api介绍: Series.str.cat()

补充的其他方法,另见参考2

确保各类为文本/字符串类型,否则先转换

1
2
3
4
5
6
7
8
9
10
11
# df['type1'] = df['type1'].astype(str)
# 最直接的是字符串相加
df_sample["typename2"] = df_sample['type1'].astype(str) +"-"+ df_sample["type2"]+"-"+ df_sample["type3"]

# 合并方式2
df_sample['typename2'] = df_sample['type1'].str.cat(df_sample[['type2', 'type3']], sep=',')

# 使用字符串join函数
df["typename2"] = df[['type1', 'type2', 'type3']].apply("-".join, axis=1)
df["typename2"] = df[['type1', 'type2', 'type3']].agg("-".join, axis=1)
df["typename2"] = df[['type1', 'type2', 'type3']].apply(lambda x: "-".join(x), axis =1)