Pandas系列(四)-文本数据处理
内容目录
- 1. 为什么要用str属性
- 2. 替换和分割
- 3. 提取子串
- 3.1 提取第一个匹配的子串
- 3.2 匹配所有子串
- 3.3 测试是否包含子串
- 3.4 生成哑变量
- 3.5 方法摘要
一、为什么要用str属性?
# 导入相关库
import numpy as np
import pandas as pd index = pd.Index(data=["Tom", "Bob", "Mary", "James", "Andy", "Alice"], name="name")
data = {
"age": [18, 30, np.nan, 40, np.nan, 30],
"city": ["Bei Jing ", "Shang Hai ", "Guang Zhou", "Shen Zhen", np.nan, " "],
"sex": [None, "male", "female", "male", np.nan, "unknown"],
"birth": ["2000-02-10", "1988-10-17", None, "1978-08-08", np.nan, "1988-10-17"]
}
user_info = pd.DataFrame(data=data, index=index)
# 将出生日期转为时间戳
user_info["birth"] = pd.to_datetime(user_info.birth)
user_info
Out[203]:
age city sex birth
name
Tom 18.0 Bei Jing None 2000-02-10
Bob 30.0 Shang Hai male 1988-10-17
Mary NaN Guang Zhou female NaT
James 40.0 Shen Zhen male 1978-08-08
Andy NaN NaN NaN NaT
Alice 30.0 unknown 1988-10-17
在之前已经了解过,在对 Series 中每个元素处理时,我们可以使用 map 或 apply 方法。比如,我想要将每个城市都转为小写,可以使用如下的方式。
In [3]: user_info.city.map(lambda x:x.lower())#报错
-------------------------------------------------------------------------
AttributeError Traceback (most recent call las
<ipython-input-3-d3c01aca317c> in <module>()
----> 1 user_info.city.map(lambda x:x.lower())#报错 d:\pytho3.6\lib\site-packages\pandas\core\series.py in map(self, arg, na_ 2996 """
2997 new_values = super(Series, self)._map_values(
-> 2998 arg, na_action=na_action)
2999 return self._constructor(new_values,
3000 index=self.index).__finalize__(s d:\pytho3.6\lib\site-packages\pandas\core\base.py in _map_values(self, ma
a_action)
1002
1003 # mapper is a function
-> 1004 new_values = map_f(values, mapper)
1005
1006 return new_values pandas/_libs/src\inference.pyx in pandas._libs.lib.map_infer() <ipython-input-3-d3c01aca317c> in <lambda>(x)
----> 1 user_info.city.map(lambda x:x.lower())#报错 AttributeError: 'float' object has no attribute 'lower' In [4]: user_info.city.str.lower()
Out[4]:
name
Tom bei jing
Bob shang hai
Mary guang zhou
James shen zhen
Andy NaN
Alice
Name: city, dtype: object In [5]: user_info.city.str.len()#字符串能用len,series,dataframe用size
Out[5]:
name
Tom 9.0
Bob 10.0
Mary 10.0
James 9.0
Andy NaN
Alice 1.0
Name: city, dtype: float64
二、替换和分割
使用 .srt 属性也支持替换与分割操作。
先来看下替换操作,例如:将空字符串替换成下划线。
replace 方法还支持正则表达式,例如将所有开头为 S 的城市替换为空字符串。
再来看下分割操作,例如根据空字符串来分割某一列。
分割列表中的元素可以使用 get 或 [] 符号进行访问:
设置参数 expand=True 可以轻松扩展此项以返回 DataFrame。
user_info.city.str.replace(' ','_')
user_info.city.str.replace('^S.*','')
user_info.city.str.split(" ")
user_info.city.str.split(" ").str.get(0)
user_info.city.str.split(" ").str[1]
user_info.city.str.split(" ", expand=True)
三、提取子串
既然是在操作字符串,很自然,你可能会想到是否可以从一个长的字符串中提取出子串。答案是可以的。
- 3.1 提取第一个匹配的子串
extract 方法接受一个正则表达式并至少包含一个捕获组,指定参数 expand=True 可以保证每次都返回 DataFrame。
例如,现在想要匹配空字符串前面的所有的字母,可以使用如下操作:如果使用多个组提取正则表达式会返回一个 DataFrame,每个组只有一列。
In [6]: user_info.city.str.extract("(\w+)\s+", expand=True)
Out[6]:
0
name
Tom Bei
Bob Shang
Mary Guang
James Shen
Andy NaN
Alice NaN
例如,想要匹配出空字符串前面和后面的所有字母,操作如下
In [7]: user_info.city.str.extract("(\w+)\s+(\w+)", expand=True)
Out[7]:
0 1
name
Tom Bei Jing
Bob Shang Hai
Mary Guang Zhou
James Shen Zhen
Andy NaN NaN
Alice NaN NaN
- 3.2 匹配所有子串
extract 只能够匹配出第一个子串,使用 extractall 可以匹配出所有的子串。
例如,将所有组的空白字符串前面的字母都匹配出来,可以如下操作。
In [8]: user_info.city.str.extractall("(\w+)\s+")
Out[8]:
0
name match
Tom 0 Bei
1 Jing
Bob 0 Shang
1 Hai
Mary 0 Guang
James 0 Shen
- 3.3 测试是否包含子串
除了可以匹配出子串外,我们还可以使用 contains 来测试是否包含子串。例如,想要测试城市是否包含子串 “Zh”。
In [9]: user_info.city.str.contains("Zh")
Out[9]:
name
Tom False
Bob False
Mary True
James True
Andy NaN
Alice False
Name: city, dtype: object
In [10]: user_info.city.str.contains("^S")
Out[10]:
name
Tom False
Bob True
Mary False
James True
Andy NaN
Alice False
Name: city, dtype: object
- 3.4 生成哑变量
这是一个神奇的功能,通过 get_dummies 方法可以将字符串转为哑变量,sep 参数是指定哑变量之间的分隔符。来看看效果吧。
In [11]: user_info.city.str.get_dummies(sep=" ")
Out[11]:
Bei Guang Hai Jing Shang Shen Zhen Zhou
name
Tom 1 0 0 1 0 0 0 0
Bob 0 0 1 0 1 0 0 0
Mary 0 1 0 0 0 0 0 1
James 0 0 0 0 0 1 1 0
Andy 0 0 0 0 0 0 0 0
Alice 0 0 0 0 0 0 0 0
- 3.5 方法摘要
这里列出了一些常用的方法摘要。 方法 描述
cat() 连接字符串
split() 在分隔符上分割字符串
rsplit() 从字符串末尾开始分隔字符串
get() 索引到每个元素(检索第i个元素)
join() 使用分隔符在系列的每个元素中加入字符串
get_dummies() 在分隔符上分割字符串,返回虚拟变量的DataFrame
contains() 如果每个字符串都包含pattern / regex,则返回布尔数组
replace() 用其他字符串替换pattern / regex的出现
repeat() 重复值(s.str.repeat(3)等同于x * 3 t2 >)
pad() 将空格添加到字符串的左侧,右侧或两侧
center() 相当于str.center
ljust() 相当于str.ljust
rjust() 相当于str.rjust
zfill() 等同于str.zfill
wrap() 将长长的字符串拆分为长度小于给定宽度的行
slice() 切分Series中的每个字符串
slice_replace() 用传递的值替换每个字符串中的切片
count() 计数模式的发生
startswith() 相当于每个元素的str.startswith(pat)
endswith() 相当于每个元素的str.endswith(pat)
findall() 计算每个字符串的所有模式/正则表达式的列表
match() 在每个元素上调用re.match,返回匹配的组作为列表
extract() 在每个元素上调用re.search,为每个元素返回一行DataFrame,为每个正则表达式捕获组返回一列
extractall() 在每个元素上调用re.findall,为每个匹配返回一行DataFrame,为每个正则表达式捕获组返回一列
len() 计算字符串长度
strip() 相当于str.strip
rstrip() 相当于str.rstrip
lstrip() 相当于str.lstrip
partition() 等同于str.partition
rpartition() 等同于str.rpartition
lower() 相当于str.lower
upper() 相当于str.upper
find() 相当于str.find
rfind() 相当于str.rfind
index() 相当于str.index
rindex() 相当于str.rindex
capitalize() 相当于str.capitalize
swapcase() 相当于str.swapcase
normalize() 返回Unicode标准格式。相当于unicodedata.normalize
translate() 等同于str.translate
isalnum() 等同于str.isalnum
isalpha() 等同于str.isalpha
isdigit() 相当于str.isdigit
isspace() 等同于str.isspace
islower() 相当于str.islower
isupper() 相当于str.isupper
istitle() 相当于str.istitle
isnumeric() 相当于str.isnumeric
isdecimal() 相当于str.isdecimal
Pandas系列(四)-文本数据处理的更多相关文章
- SQL Server 2008空间数据应用系列四:基础空间对象与函数应用
原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...
- VSTO之旅系列(四):创建Word解决方案
原文:VSTO之旅系列(四):创建Word解决方案 本专题概要 引言 Word对象模型 创建Word外接程序 小结 一.引言 在上一个专题中主要为大家介绍如何自定义我们的Excel 界面的,然而在这个 ...
- 系列四TortoiseSvn客户端软件
原文:系列四TortoiseSvn客户端软件 TortoiseSvn介绍 TortoiseSvn 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录.文件保存在中 ...
- sed修炼系列(四):sed中的疑难杂症
本文目录:1 sed中使用变量和变量替换的问题2 反向引用失效问题3 "-i"选项的文件保存问题4 贪婪匹配问题5 sed命令"a"和"N" ...
- Pandas系列之入门篇
Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pand ...
- 分布式系列四: HTTP及HTTPS协议
分布式系列四: HTTP及HTTPS协议 非常全面的一篇HTTP的文章: 关于HTTP协议,一篇就够了 还有一个帮助理解HTTPS的文章: 也许,这样理解HTTPS更容易 本文的一些描述摘自这篇文章 ...
- 转:arcgis api for js入门开发系列四地图查询
原文地址:arcgis api for js入门开发系列四地图查询 arcgis for js的地图查询方式,一般来说,总共有三种查询方式:FindTask.IdentifyTask.QueryTas ...
- [转]C# 互操作性入门系列(四):在C# 中调用COM组件
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- Paddle Graph Learning (PGL)图学习之图游走类模型[系列四]
Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...
- 前端构建大法 Gulp 系列 (四):gulp实战
前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...
随机推荐
- c/c++ 继承与多态 继承中的public, protected, private
问题:类B私有继承类A,类A有个protected成员,那么在类B的成员函数里是否可以使用类A的protected成员? 可以使用. 估计有的同学说不对吧,类B都私有继承了类A了,怎么还能访问类A的p ...
- java反射(java.lang.reflect) ---普通单例模式唯一性问题
1. 普通的饱汉式.饿汉式 package org.bighead.test2; public class TestPrivate { private String str = "strPr ...
- debian 9 开机启动
由于某些软件并没有增加开启启动的服务,很多时候需要手工添加,一般我们都是推荐添加命令到 /etc/rc.local 文件,但是 Debian 9 默认不带 /etc/rc.local 文件,而 rc. ...
- SQLServer之数据类型解析
数字 int.bigint.smallint 和 tinyint 使用整数数据的精确数字数据类型. 数据类型 范围 存储 tinyint 0 到 255. 1 字节 smallint -2^15 (- ...
- daily english dictation 学习笔记[1-10]
b站网址https://www.bilibili.com/video/av17188299/?p=2 1. Mother Teresa, who received a Nobel Peace Priz ...
- 【Python 08】汇率兑换2.0-1(字符串索引)
1.案例描述 设计一个汇率换算程序,其功能是将人民币转换为美元,或者美元转换为人民币. 增加功能:根据输入判断是人民币还是美元,进行相应的转换计算. 2.案例分析 3.字符串 两个双引号或单引号括起 ...
- Offset Management For Apache Kafka With Apache Spark Streaming
An ingest pattern that we commonly see being adopted at Cloudera customers is Apache Spark Streaming ...
- 实现element-ui中table点击一行展开
转:https://www.jianshu.com/p/e51ba4cb11d6 先上效果 效果图 三要素 1.row-click 点击行 2.ref 自行了解vue 3.toggleRowExp ...
- find mtime参数+号,-号,不带符号的用法
find . -mtime +0 -type f -name "oms*" | xargs rm -f 删除24小时以前 oms格式的文件 #按文件更改时间来查找文件,- ...
- C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载(极速,简洁)
本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...