我们在日常工作中经常遇到数据分列的问题,今天跟大家分享pandas的split()
函数的基本用法:
我们创建了一个简单的dataframe,数据如下:
In [1] import pandas as pd
....: data = {'brand_model': ['德力西 GW912200', '埃帝尔 IB-207TPN-06231C02', '德力西 72LT3YFM40D', '科顺 2-3654-561 铆钉型'],
'cate':['低压', '管阀', '低压', '搬运']}
....: df_data = pd.DataFrame(data)
....: print(df_data)
Out[1]:
brand_model cate
0 德力西 GW912200 低压
1 埃帝尔 IB-207TPN-06231C02 管阀
2 德力西 72LT3YFM40D 低压
3 科顺 2-3654-561 铆钉型 搬运
其中列'brand_model'需要拆分成2列:brand和model。我们看到brand和model之间是空格,所以我们可以这样来实现拆分:
In [2]: df_data['brand_model'].str.split(' ', 1, expand=True)
Out[2]:
0 1
0 德力西 GW912200
1 埃帝尔 IB-207TPN-06231C02
2 德力西 72LT3YFM40D
3 科顺 2-3654-561 铆钉型
注意:Series数据类型没有split()函数,所以需要先用.str将这一列转换为类似字符串的格式,然后再使用split()函数。
然后使用merge函数连接:
In [3]: pd.merge(df_data, df_data['brand_model'].str.split(' ', 1, expand=True), how='left', left_index=True, right_index=True)
Out[3]:
brand_model cate 0 1
0 德力西 GW912200 低压 德力西 GW912200
1 埃帝尔 IB-207TPN-06231C02 管阀 埃帝尔 IB-207TPN-06231C02
2 德力西 72LT3YFM40D 低压 德力西 72LT3YFM40D
3 科顺 2-3654-561 铆钉型 搬运 科顺 2-3654-561 铆钉型
split()函数讲解:
split`(*self*, *pat=None*, *n=-1*, *expand=False*)
pat
:分列的依据,可以是空格,符号,字符串等等。
n
:分列的次数,不指定的话就会根据符号的个数全部分列。
expand
:为True可以直接将分列后的结果转换成DataFrame。
如果想要从最右边开始分列,可以使用rsplit()
,rsplit()
和split()
的用法类似,一个从右边开始,一个从左边开始。
网友评论