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 已经被证明为是非常强大的用于处理时间序列数据的工具.本节将介绍 ...
随机推荐
- docker 更新后出现 error during connect
docker更新后出现 error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.39/containers/json: o ...
- Flutter中TabBarView切换状态保存
TabBarView 类似于Android中的viewPager,但是默认是没有实现切换分页状态保存的.估计是出于节约内存的原因吧. 发现这个问题的时候,搜索了一下全网.大致就两种解决方案,1是修改源 ...
- GAN算法笔记
本篇文章为Goodfellow提出的GAN算法的开山之作"Generative Adversarial Nets"的学习笔记,若有错误,欢迎留言或私信指正. 1. Introduc ...
- 用 Python 爬取网易严选妹子内衣信息,探究妹纸们的偏好
网易商品评论爬取 分析网页 评论分析 进入到网易精选官网,搜索“文胸”后,先随便点进一个商品. 在商品页面,打开 Chrome 的控制台,切换至 Network 页,再把商品页Python入门到精通学 ...
- PowerBI系列之什么是PowerBI
大家好,我是小黎子!一个专注于数据分析整体数据仓库解决方案的程序猿!今天小黎子就给大家介绍一个数据分析工具由Microsoft出品的全新数据可视化工具Power BI.微软Excel很早就支持了数据透 ...
- 快速入门Maven(一)
一.Maven简介 1.什么是maven Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建.依赖管理和项目信息管理. 2.Maven的好处 构建是程序员每天要 ...
- yum安装出现No package vim available解决办法
[root@iZwz96wgquf8g6okusxr0uZ yum.repos.d]# yum install yum-downloadLoaded plugins: fastestmirrorLoa ...
- 实验吧之【简单的登录题(】CBC字节反转攻击)
开始刷ctf题吧 慢慢来. 实验吧---简单的登录题 题目地址:http://ctf5.shiyanbar.com/web/jiandan/index.php 随便提交一个id,看到后台set了两个 ...
- shark恒破解笔记6-摆脱NAG
1.打开软件后,发现是未注册,然后点击关闭按钮,会弹出窗口 我们的目的就是为了能够去掉这个弹窗. 2.对这个程序进行查壳,没有什么发现 3.载入OD里面,F9运行起来,随后切换到程序主界面点击关闭按钮 ...
- 【Labview入门】将输入度数转换为3位精度弧度值
Labview版本2015 程序如下: 可以右键输出控件选择属性来调整输出的小数位数: 运行结果: