首页 > pandas 阅读数:40

pandas数据的字段抽取与拆分

数据抽取,也称为数据拆分,它是通过保留、抽取源数据表中的某些字段、记录的部分信息来形成一些新字段和新记录。例如,在手机号码里包含运营商、地区和号码段等信息,通过数据抽取获得相应的字段后,就可以对相应的数据进行分析。

字段抽取

字段抽取是根据已知列数据的开始和结束位置,抽取出新的列。字段抽取采用 slice() 函数,该函数的语法格式如下:

Series.str.slice(start=None, stop=None)

函数中的参数说明如下:
  • start:表示字段抽取的开始位置;
  • stop:表示字段抽取的结束位置。

例如,手机号码 1857332XXXX 中前 3 位 185 表示运营商,中间 4 位 7332 表示地区,后面 4 位 XXXX 是号码段。

字段拆分

字段拆分是按照固定的字符,拆分已有的字符串。字符分割函数有正序分割列 split() 函数和逆序分割列 rsplit() 函数,其中,split() 函数的语法格式如下:

Series.str.split(sep=None, n=-1, expand=False)

函数中的参数说明如下:
  • sep:表示用于分割字符的字符串,默认使用空白分割;
  • n:接收整数,默认为 -1,表示分割的列数;
  • expand:接收布尔值,默认为 False,如果为 True,返回数据框(DataFrame)或复杂索引(MultiIndex);如果为 False,返回序列(Series)或者索引(Index)。

例如,在“商品信息”字段中包含品牌、分类和型号等信息,为了便于数据分析,需要将“商品信息”字段拆分为“品牌”“分类”和“型号”等字段。如“Haier冰箱BCD-630WBGUU1”,可拆分为品牌为“Haier”,分类为“冰箱”,型号为“BCD-630WBGUU1”。

【例 1】在商品销售.xls文件中包含了用户 ID、商品信息、单价、数量和电话等数据字段,现要求完成下列分类统计计算。
1) 按品牌分类统计商品销售数量。
2) 按商品种类分类统计商品销售数量。
3) 按地区分类统计商品销售数量。

程序设计思路:首先导入商品销售.xls数据,然后,将“商品信息”字段拆分为“品牌”“分类”和“型号”3 个字段,再分别按“品牌”和“分类”字段进行分类统计计算。同时,从“电话”字段中抽取出地区号,按地区号分类统计商品销售数量。

其示例代码 test1.py 如下。
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
#导入数据
data = pd.read_csv('d:\data\goods_sales.csv',encoding='GBK')
print(data)
#将商品信息拆分成3列的数据框
newData = data['商品信息'].str.split(';', 3, True)
newData.columns = ['品牌', '分类','型号']  #设置列名
print(newData)
df = data.drop('商品信息', axis=1).join(newData)
result = df.groupby(by=['品牌'])['数量'].agg({
         '数量':np.sum})
print(result)
result = df.groupby(by=['分类'])['数量'].agg({
         '数量':np.sum})
print(result)

#抽取电话号码地区号
telData = data['电话'].astype(str)
areas = telData.str.slice(3, 7)
print(areas)
newDf = data.drop('电话', axis=1).join(areas)
print(newDf)
result = newDf.groupby(by=['电话'])['数量'].agg({
         '数量':np.sum})
print(result)