文本数据的整理

文本是最常见的基本数据类型之一。本节介绍比较常用的分列、查找、替换等操作,还介绍一下虚拟变量。另外,正则表达式也是文本数据处理的重要内容,因为这部分内容比较多,放在下一节单独进行介绍。[大谦Excel,dqexcel点com]

数据分列

分列是将给定的数据用指定的字符(串)分割并将结果各自放到单独的列。

图3-19所示工作表中,A列每个单元格中是商品名称和规格组成的文本,现在要求从文本中分割出规格中的长和宽,放到单独的列中。

单元格C1中在Python模式下在公式栏输入下面代码:

code.python
df=xl("A1:A9",headers=True)
#先将“品名”和“规格”分割开
df[['品名','规格']]=df['品名规格'].str.split('纸',expand=True)
#再根据“规格”分割出“长”和“宽”
df[['长','宽']]=df['规格'].str.split('*',expand=True)
#删除“品名”和“规格”列
df=df.drop(['品名','规格'],axis=1)

单击键盘上的Ctrl+Enter键,C1单元格返回一个DataFrame对象。以Excel值的形式显示,得到图3-19中C-E列的数据。代码使用Series对象的str.split方法,先用字符“纸”将品名和规格分割成两列,命名为“品名”和“规格”;然后将“规格”列的数据用“*”字符分割成”长”和“宽”两列。最后将“品名”和“规格”两列用DataFrame对象的drop方法删除。

Document Image

图3-19 数据分列

查找和替换

图3-20所示工作表中,B列第2-4行每个单元格中是表示食材采购明细的文本,现在要求从文本中找到“公斤”和“kg”,并全部替换为“千克”。

单元格A6中在Python模式下在公式栏输入下面代码:

code.python
df=xl("A1:B4",headers=True)
df['采购明细']=df['采购明细'].str.replace('公斤','千克').str.replace('kg','千克')
df

单击键盘上的Ctrl+Enter键,A6单元格返回一个DataFrame对象。以Excel值的形式显示,得到图3-20中A6:B9内的数据。可见,文本已经按要求进行了替换,所有单位统一成了“千克”。代码使用Series对象的str.replace方法实现替换。

Document Image

图3-20 文本查找和替换

虚拟变量

图3-21所示工作表中,B列是销售的商品的名称。在某种使用场景下,要求根据B列数据得到F-I列的数据。F-I列每一列对应的变量称为虚拟变量。虚拟变量的值取0或1。本例中,取值为1时表示对应订单卖出了该商品,取值为0时表示没有卖出该商品。比如第1单卖出了电视机,则第G列对应的“电视机”变量的取值为1。

单元格F1中在Python模式下在公式栏输入下面代码:

code.python
df=xl("A1:D10",headers=True)
pd.get_dummies(df['商品'])

单击键盘上的Ctrl+Enter键,F1单元格返回一个DataFrame对象。以Excel值的形式显示,得到图3-21中F-I列的数据。创建虚拟变量使用pandas的get_dummies函数。

Document Image

图3-21 生成虚拟变量