Pandas数据分析:处理文本数据(str/object)各类操作+代码一文详解(一)

简介: Pandas数据分析:处理文本数据(str/object)各类操作+代码一文详解(一)

前言


Pandas数据分析系列专栏已经更新了很久了,基本覆盖到使用pandas处理日常业务以及常规的数据分析方方面面的问题。从基础的数据结构逐步入门到处理各类数据以及专业的pandas常用函数讲解都花费了大量时间和心思创作,如果大家有需要从事数据分析或者大数据开发的朋友推荐订阅专栏,将在第一时间学习到Pandas数据分析最实用常用的知识。此篇博客篇幅较长,涉及到处理文本数据(str/object)等各类操作,值得细读实践一番,我会将Pandas的精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。


一、文本数据类型


Pandas用来代表文本数据类型有两种:


object:一般为NumPy的数组

string:最常规的文本数据


我们最常用的还是使用string来存储文本文件,但是使用dataframe和series进行数据处理转换的时候object数据类型又用的多。在Pandas1.0版本之前只有object类型,这会导致字符数据和非字符数据全部都以object方式存储,导致处理混乱。而后续版本优化加入了String更好的区分了处理文本数据的耦合问题。目前的object类型依旧是文本数据和数组类型的string数据,但是Pandas为了后续的兼容性依旧将object类型设为默认的文本数据存储类型。


二、文本转换


例如我们新建一个Series:


pd.Series(['a','b','c'])



2c1691cb95f442608d5a361c432646a7.png


默认创建为object类型,当然可以指定为string类型:


pd.Series(["a", "b", "c"], dtype="string")


6fce99b62c474ea391b27cabfd920db9.png


亦或是:


pd.Series(["a", "b", "c"], dtype=pd.StringDtype())


f03361c66d624179870304ed5a2e2289.png


若开始没有指定则可以使用astype方法强制转换:


1. s = pd.Series(["a", "b", "c"])
2. s.astype("string")



9337bd1d3c3446978810b787b011129f.png

三、Object与String的差别


对于StringDtype,返回数值输出的字符串操作方法将始终返回可为空的整数数据类型,而不是int或float数据类型,具体取决于NA值的存在。返回布尔输出的方法将返回可为空的布尔数据类型。


我们用案例展示一遍就明白了:


s = pd.Series(["a", None, "b"], dtype="string")
s


84bdec96ff8843128cd17dbed6eb952d.png

s.str.count("a")

cd653093feb540609d4d93aaf3cc92b9.png

s.dropna().str.count("a")

image.png


以上都是string数据类型处理后的结果,我们与之对比一下object就会发现:


1. s2 = pd.Series(["a", None, "b"], dtype="object")
2. s2


f8edf5d848da4344a0f821c16f90d520.png

s2.str.count("a")

59d93e3a7e654a4ea547cb97d89bf80d.png


可以发现object与string不同的是聚合后显示的数据类型,前者是float后者则是int。


s2.dropna().str.count("a")

aa69b5e2ad244e62a6aff4f4f506c028.png


而当去掉NA时候则为int,这和string一样。当存在NA值时,输出数据类型为float64。


s.str.isdigit()


bb62240129d44606b826f03a6b372a0d.png

s.str.match("a")

3820f2bf231e4529bda3a1e38e0a3075.png


有些字符串方法,如Series.str.decode()在StringArray上不可用,因为StringArray只保存字符串,而不是字节。在比较操作中,数组。StringArray和由StringArray支持的序列将返回一个具有BooleanDtype的对象,而不是bool dtype对象。StringArray中缺少的值将在比较操作中传递,而不是像numpy.nan那样总是比较不相等的值。


四、String处理方法


序列和索引都配备了一组字符串处理方法,可以轻松地对数组的每个元素进行操作。最重要的是这些方法自动排除丢失的/NA值。这些方法通过str属性访问,通常名称与等效(标量)内置字符串方法匹配:


1.大小写转换


这里我们创建测试用例:


s=pd.Series(['A','b','C',np.nan,'ABC','abc','AbC'],dtype='string')


小写转换lower()


s.str.lower()

fcd8de17783647d6b2ea4023dc2a32e5.png

大写转换upper()


s.str.upper()


5cf64c70980142b7b788238ce36bb254.png

2.元素长度


输出每个元素的长度len()就可以做到:


s.str.len()

6fa782bc3ff84869ae271b1d8cd8164d.png


3.字符串空格去除


这种方法有三种控制形式,这里我们创建一个覆盖测试用例全面的数据集:


s=pd.Index([' A','A ',' A ','A'],dtype='string')


b479dd84eff14240b998c3d1b71336a4.png

全部去除strip()


s.str.strip()

c68e6c1fc7c24a7fbca33e56a8a158fd.png


只去除左边lstrip()


s.str.lstrip()

9f6dbdb37cd546a399c99b573e27e9fd.png

只去除右边rstrip()


s.str.rstrip()


image.png

索引上的字符串方法对于处理或转换DataFrame列特别有用。例如,可能有带有前导或尾随空格的列:


df = pd.DataFrame(
    np.random.randn(3, 2), columns=[" Column A ", " Column B "], index=range(3)
)

708f6643dc1749dc8d4cdec36eebda46.png

我们将列索引提取之后使用str类方法就可以处理转换:


df.columns.str.strip()

1dd45aa2ba82470b89c82f113e384265.png

也可以自由进行大小写转换:


df.columns.str.lower()


f7bd02cf0d4e4774a081e7cdc80dd97b.png


组合一起来用的话,还可以搭配其他函数实现复杂的转换效果:


df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")

c576db2c46e84586af208d411d64bfb7.png


开篇文章不讲过多,下篇文章我们再去了解一些基础的方法。

目录
相关文章
|
15天前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
113 71
|
14天前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
116 73
|
11天前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
54 22
|
2月前
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
137 56
|
15天前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
51 5
|
27天前
|
数据采集 监控 数据挖掘
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
|
3月前
|
机器学习/深度学习 人工智能 搜索推荐
某A保险公司的 数据图表和数据分析
某A保险公司的 数据图表和数据分析
77 0
某A保险公司的 数据图表和数据分析
|
21天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
145 4
|
3月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
138 20