Pandas文本数据处理
先初始化数据
import pandas as pd
import numpy as np
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
为什么要用str属性
文本数据也就是我们常说的字符串,Pandas 为 Series 提供了 str 属性,通过它可以方便的对每个元素进行操作。在之前已经了解过,在对 Series 中每个元素处理时,我们可以使用 map 或 apply 方法。
# 将每个城市都转为小写:
user_info.city.map(lambda x: x.lower())
What?竟然出错了,错误原因是因为 float 类型的对象没有 lower 属性。这是因为缺失值 (np.nan)属于float 类型
这时候我们的 str 属性操作来了,来看看如何使用吧
# 将文本转为小写
user_info.city.str.lower()
# 统计每个字符串的长度
user_info.city.str.len()
替换和分割
替换操作
# 将空字符串替换成下划线:
user_info.city.str.replace(" ", "_")
# 使用正则表达式将所有开头为 S 的城市替换为空字符串:
user_info.city.str.replace("^S.*", " ")
分割操作
# 根据空字符串来分割某一列:
user_info.city.str.split(" ")
"""
name
Tom [Bei, Jing]
Bob [Shang, Hai]
Mary [Guang, Zhou]
James [Shen, Zhen]
Andy NaN
Alice [, ]
Name: city, dtype: object
""" #分割列表中的元素可以使用 get 或 [] 符号进行访问:
user_info.city.str.split(" ").str.get(0)
"""
name
Tom Bei
Bob Shang
Mary Guang
James Shen
Andy NaN
Alice
Name: city, dtype: object
""" user_info.city.str.split(" ").str[1]
"""
name
Tom Jing
Bob Hai
Mary Zhou
James Zhen
Andy NaN
Alice
Name: city, dtype: object
""" # 设置参数 expand=True 可以轻松扩展此项以返回 DataFrame
user_info.city.str.split(" ", expand=True)
"""
0 1
name
Tom Bei Jing
Bob Shang Hai
Mary Guang Zhou
James Shen Zhen
Andy NaN NaN
Alice
"""
提取子串
从一个长的字符串中提取出子串。
提取第一个匹配的子串
extract 只能够匹配出第一个子串,extract 方法接受一个正则表达式并至少包含一个捕获组,指定参数 expand=True 可以保证每次都返回 DataFrame。
\s+ :一个或多个空字符串
(\w+):分组捕获任意多个字符
(\w+)\s+:在一个或多个空字符串前,分组捕获任意多个字符
# 匹配空字符串前面的所有的字母
user_info.city.str.extract("(\w+)\s+", expand=True)
"""
0
name
Tom Bei
Bob Shang
Mary Guang
James Shen
Andy NaN
Alice NaN
""" # 如果使用多个组提取正则表达式会返回一个 DataFrame,每个组只有一列。
# 匹配出空字符串前面和后面的所有字母
user_info.city.str.extract("(\w+)\s+(\w+)", expand=True)
"""
0 1
name
Tom Bei Jing
Bob Shang Hai
Mary Guang Zhou
James Shen Zhen
Andy NaN NaN
Alice NaN NaN
"""
匹配所有子串
extract 只能够匹配出第一个子串,使用 extractall 可以匹配出所有的子串。
# 将所有组的空白字符串前面的字母都匹配出来
user_info.city.str.extractall("(\w+)\s+")
"""
0
name match
Tom 0 Bei
Bob 0 Shang
Mary 0 Guang
James 0 Shen
"""
测试是否包含子串
使用 contains 来测试是否包含子串 --> 布尔值
# 测试城市是否包含子串 'Zh':
user_info.city.str.contains("Zh")
# 测试是否是以字母 'S' 开头:
user_info.city.str.contains("^S")
生成哑变量
这是一个神奇的功能,通过 get_dummies 方法可以将字符串转为哑变量, sep 参数是指定哑变量之间的分隔符
user_info.city.str.get_dummies(sep=" ")
方法摘要
方法 | 描述 |
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() | 计算字符串长度 |
normalize() | 返回Unicode标准格式。相当于unicodedata.normalize |
Pandas文本数据处理的更多相关文章
- Pandas缺失数据处理
Pandas缺失数据处理 Pandas用np.nan代表缺失数据 reindex() 可以修改 索引,会返回一个数据的副本: df1 = df.reindex(index=dates[0:4], co ...
- pandas | 使用pandas进行数据处理——DataFrame篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第二篇文章,我们一起来聊聊pandas当中最重要的数据结构--DataFrame. 上一篇文章当中我们介绍了 ...
- Pandas系列(四)-文本数据处理
内容目录 1. 为什么要用str属性 2. 替换和分割 3. 提取子串 3.1 提取第一个匹配的子串 3.2 匹配所有子串 3.3 测试是否包含子串 3.4 生成哑变量 3.5 方法摘要 一.为什么要 ...
- pynlpir + pandas 文本分析
pynlpir是中科院发布的一个分词系统,pandas(Python Data Analysis Library) 是python中一个常用的用来进行数据分析和统计的库,利用这两个库能够对中文文本数据 ...
- Pandas日期数据处理:如何按日期筛选、显示及统计数据
前言 pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows ...
- Pandas文本操作之读取操作
读写文本格式的数据 pandas中的解析函数 函数 说明 read_csv 从文件.url.文件型对象中加载带分隔符的数据,默认分隔符为逗号 read_table 从文件.url.文件型对象中加载带分 ...
- 5,pandas高级数据处理
1.删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True - keep参数:指定保留哪一重复的行 ...
- pandas之数据处理
首先,数据加载 pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,期中read_csv和read_table这两个使用最多. 1.删除重复元素 使用duplicated()函数 ...
- Python——Pandas 时间序列数据处理
介绍 Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取.转换.过滤.分析等一系列操作.同样,Pandas 已经被证明为是非常强大的用于处理时间序列数据的工具.本节将介绍 ...
随机推荐
- 手把手教你如何在window下将jenkins+allure集成生成的测试报告通过jenkins配置邮箱自动发送-04(非常详细,非常实用)
简介 上一篇生成测试报告,小伙伴们和童鞋们就又问道,测试报告已经生成了,怎么发送给相关的负责人了?小伙伴们和童鞋们不要着急,听宏哥慢慢给你道来,心急吃不了热豆腐哈.今天这篇文章宏哥就给小伙伴和童鞋们来 ...
- 整理一些大厂的开源平台及github,向他们看齐...
有人苦恼,该如何突破技术的局限性... 有人羡慕,技术上你怎么懂得这么多... 有人哀叹,唉,我已经学不动了... 我的总结(纯属个人想法):身处IT,就得不断学习和积累,才不会被狠狠地甩在身后.什么 ...
- Nginx的基本安装配置
Centos7安装nginx 升级nginx 升级可能遇到问题(我没有遇到, 参考的另一篇文章描述的) 检查nginx版本, 确认安装成功 nginx配置文件 虚拟主机配置 配置文件中可以用的全局变量 ...
- 设计模式----行为型模式之观察者模式(Observer Pattern)
下面是阅读<Head First设计模式>的笔记. 观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. JDK API内置机制 ...
- 关于MySQL退出命令,还有你不知道的一种操作
前两天再进MySQL窗口的时候,手快点了一个 ' ,并且按下了enter键,于是就出现了这种情况, 然后就退不出来了,为此我还特意上网查了一下,最后的结果基本上都是只能关闭MySQL 重新进入. 因为 ...
- 利用 SASS 简化 `nth-child` 样式的生成
考察如下的 HTML 片段,通过 CSS 的 nth-child() 伪选择器实现列表的颜色循环,比如每三个一次循环. <ul> <li>1</li> <li ...
- HTTP/1.1与HTTP/2有什么区别?
介绍 超文本传输协议(HTTP)是一种应用协议,自1989年发明以来,它一直是事实上在万维网上进行通信的标准.从1997年发布HTTP / 1.1到最近,对它的修改很少.协议.但是在2015年,重 ...
- MakaJs:基于 React, Redux 的轻量级前端框架
github: maka.js 留下您宝贵的STAR!谢谢 maka maka源于中文码咖,意为写代码的大咖 一眼即可看懂的前端框架,简约而不简单 1.安装 bash sudo npm i -g @m ...
- ThinkPHP架构(一)-TP原理及路径问题及后台实现实例
一直用CSDN的博客,由于域名当时注册写的不合适,现在想来博客园写博客,以后要坚持写啦,记录自己的技术学习路程 本人两个月前,刚完成基于PHP的研会门户网站,虽然实现了基本功能,但感觉技术有些单薄,便 ...
- 冰释前嫌——转入Android Studio与连接手机无法识别问题
前言:曾有段时间被AS+gradle虽紧密结合却依然搞不定联网依赖的模样弄的头疼,尝试了各种改代理.改配置均无果,于是坚守Eclipse进行开发学习,结果一方面受制于gradle Android项目的 ...