2025年Part 9-Pandas 的字符串处理操作

Part 9-Pandas 的字符串处理操作Pandas 字符串处理 前面我们已经使用了字符串的处理函数 df bWendu str replace astype int32 Pandas 的字符串处理 1 使用方法 先获取 Series 的 str 属性 然后在属性上调用函数 2 只能在字符串列上使用

大家好,我是讯享网,很高兴认识大家。

Pandas字符串处理

1.使用方法:先获取Series的str属性,然后在属性上调用函数;

2.只能在字符串列上使用,不能数字列上使用;

3. Dataframe上没有str属性和处理方法

4.Series.str并不是Python原生字符串,而是自己的一套方法,不过大部分和原生str很相似;

内容如下:

1.获取Series的str属性,然后使用各种字符串处理函数

2.使用str的startswith、contains等bool类Series可以做条件查询

3.需要多次str处理的链式操作

4.使用正则表达式的处理

1、分步骤读取数据

import pandas as pd fpath='./datas/beijing_tianqi/beijing_tianqi_2018.csv' df=pd.read_csv(fpath) df.head()

讯享网


讯享网

讯享网df.dtypes

 2、获取Series的str属性,使用各种字符串处理函数

获取最高温度的Series的温度列

#获取最高温度的Series的温度列 df['bWendu'].str

 

字符串替换函数

讯享网#字符串替换函数 df['bWendu'].str.replace('℃','')

判断是不是数字

#判断是不是数字 df['bWendu'].str.isnumeric()


 

讯享网df['aqi'].str.len() #AttributeError: Can only use .str accessor with string values! len()方法只能用于字符串类型的数据

AttributeError: Can only use .str accessor with string values!  len()方法只能用于字符串类型的数据

3、使用str 的startwith、contains等得到bool的Series可以做条件查询

Pandas startswith()是另一种在系列或 DataFrame 中搜索和过滤文本数据的方法。此方法类似于Python的startswith()方法,但参数不同,并且仅适用于Pandas对象。因此,.str必须在每次调用此方法之前加上前缀,以便编译器知道它与默认函数不同。

用法:Series.str.startswith(pat, na=nan)

参数:
pat:要搜索的字符串。 (不接受正则表达式)
na:用于设置序列中的值为NULL时应显示的内容。

返回类型:布尔序列,为True,其中值的开头是传递的字符串。

从ymd这一列挑选出2018-03这类型的数据,返回的是一个Boolean类型
 

#从ymd这一列挑选出2018-03这类型的数据,返回的是一个Boolean类型 condition=df['ymd'].str.startswith('2018-03') condition

 

输出在condition条件下的df中的数据

讯享网#输出在condition条件下的df中的数据 df[condition].head()

4、需要多次str处理的链式操作 

df['ymd'].str.replace('-','')

问题:直接在Series上面调用方法的话,是否可行?

答:不可行

原因:每次调用函数,都会返回一个新的series
df['ymd'].str.replace('-','').slice(0,6)
'Series' object has no attribute 'slice'---意思就是series不能够直接去调用slice函数,必须经过str调用后才可以使用

讯享网#原因:每次调用函数,都会返回一个新的series df['ymd'].str.replace('-','').slice(0,6) #'Series' object has no attribute 'slice'---意思就是series不能够直接去调用slice函数,必须经过str调用后才可以使用
df['ymd'].str.replace('-','').str.slice(0,6)

slice是切片操作,也可以直接为str[0:6]
 

讯享网#slice是切片操作,也可以直接为str[0:6] df['ymd'].str.replace('-','').str[0:6]

5、使用正则表达式的处理 

#添加新列 def get_riqi(x): year,month,day=x['ymd'].split('-') return f'{year}年{month}月{day}日' df['中文日期']=df.apply(get_riqi,axis=1) df['中文日期']

 

new question? -----如何将日期中,年月日三个字去除 

方法1:链式replace

讯享网#方法1:链式replace df['中文日期'].str.replace('年','').str.replace('月','').str.replace('日','')

 

Series.str默认开启了正则表达式模式 

方法2:正则表达式替换
 

#方法2:正则表达式替换 df['中文日期'].str.replace('[年月日]','',regex=True)


 

注:

The default value of regex will change from True to False in a future version.
在Pandas未来的版本中,.str.replace() 的regex的默认值将从True变为False
而当regex=True时,单字符正则表达式不会被视为文本字符串
因为我们是针对price中两个单个字符进行操作,因此设置regex=True 

 

小讯
上一篇 2025-04-05 09:26
下一篇 2025-01-06 13:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/37785.html