先初始化数据

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文本数据处理的更多相关文章

  1. Pandas缺失数据处理

    Pandas缺失数据处理 Pandas用np.nan代表缺失数据 reindex() 可以修改 索引,会返回一个数据的副本: df1 = df.reindex(index=dates[0:4], co ...

  2. pandas | 使用pandas进行数据处理——DataFrame篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第二篇文章,我们一起来聊聊pandas当中最重要的数据结构--DataFrame. 上一篇文章当中我们介绍了 ...

  3. Pandas系列(四)-文本数据处理

    内容目录 1. 为什么要用str属性 2. 替换和分割 3. 提取子串 3.1 提取第一个匹配的子串 3.2 匹配所有子串 3.3 测试是否包含子串 3.4 生成哑变量 3.5 方法摘要 一.为什么要 ...

  4. pynlpir + pandas 文本分析

    pynlpir是中科院发布的一个分词系统,pandas(Python Data Analysis Library) 是python中一个常用的用来进行数据分析和统计的库,利用这两个库能够对中文文本数据 ...

  5. Pandas日期数据处理:如何按日期筛选、显示及统计数据

    前言 pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows ...

  6. Pandas文本操作之读取操作

    读写文本格式的数据 pandas中的解析函数 函数 说明 read_csv 从文件.url.文件型对象中加载带分隔符的数据,默认分隔符为逗号 read_table 从文件.url.文件型对象中加载带分 ...

  7. 5,pandas高级数据处理

    1.删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True - keep参数:指定保留哪一重复的行 ...

  8. pandas之数据处理

    首先,数据加载 pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,期中read_csv和read_table这两个使用最多. 1.删除重复元素 使用duplicated()函数 ...

  9. Python——Pandas 时间序列数据处理

    介绍 Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取.转换.过滤.分析等一系列操作.同样,Pandas 已经被证明为是非常强大的用于处理时间序列数据的工具.本节将介绍 ...

随机推荐

  1. 手把手教你如何在window下将jenkins+allure集成生成的测试报告通过jenkins配置邮箱自动发送-04(非常详细,非常实用)

    简介 上一篇生成测试报告,小伙伴们和童鞋们就又问道,测试报告已经生成了,怎么发送给相关的负责人了?小伙伴们和童鞋们不要着急,听宏哥慢慢给你道来,心急吃不了热豆腐哈.今天这篇文章宏哥就给小伙伴和童鞋们来 ...

  2. 整理一些大厂的开源平台及github,向他们看齐...

    有人苦恼,该如何突破技术的局限性... 有人羡慕,技术上你怎么懂得这么多... 有人哀叹,唉,我已经学不动了... 我的总结(纯属个人想法):身处IT,就得不断学习和积累,才不会被狠狠地甩在身后.什么 ...

  3. Nginx的基本安装配置

    Centos7安装nginx 升级nginx 升级可能遇到问题(我没有遇到, 参考的另一篇文章描述的) 检查nginx版本, 确认安装成功 nginx配置文件 虚拟主机配置 配置文件中可以用的全局变量 ...

  4. 设计模式----行为型模式之观察者模式(Observer Pattern)

    下面是阅读<Head First设计模式>的笔记. 观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. JDK API内置机制 ...

  5. 关于MySQL退出命令,还有你不知道的一种操作

    前两天再进MySQL窗口的时候,手快点了一个 ' ,并且按下了enter键,于是就出现了这种情况, 然后就退不出来了,为此我还特意上网查了一下,最后的结果基本上都是只能关闭MySQL 重新进入. 因为 ...

  6. 利用 SASS 简化 `nth-child` 样式的生成

    考察如下的 HTML 片段,通过 CSS 的 nth-child() 伪选择器实现列表的颜色循环,比如每三个一次循环. <ul> <li>1</li> <li ...

  7. HTTP/1.1与HTTP/2有什么区别?

    介绍 超文本传输​​协议(HTTP)是一种应用协议,自1989年发明以来,它一直是事实上在万维网上进行通信的标准.从1997年发布HTTP / 1.1到最近,对它的修改很少.协议.但是在2015年,重 ...

  8. MakaJs:基于 React, Redux 的轻量级前端框架

    github: maka.js 留下您宝贵的STAR!谢谢 maka maka源于中文码咖,意为写代码的大咖 一眼即可看懂的前端框架,简约而不简单 1.安装 bash sudo npm i -g @m ...

  9. ThinkPHP架构(一)-TP原理及路径问题及后台实现实例

    一直用CSDN的博客,由于域名当时注册写的不合适,现在想来博客园写博客,以后要坚持写啦,记录自己的技术学习路程 本人两个月前,刚完成基于PHP的研会门户网站,虽然实现了基本功能,但感觉技术有些单薄,便 ...

  10. 冰释前嫌——转入Android Studio与连接手机无法识别问题

    前言:曾有段时间被AS+gradle虽紧密结合却依然搞不定联网依赖的模样弄的头疼,尝试了各种改代理.改配置均无果,于是坚守Eclipse进行开发学习,结果一方面受制于gradle Android项目的 ...