Part 9:Pandas 的字符串处理操作

Pandas字符串处理

前面我们已经使用了字符串的处理函数:
    df["bWendu"].str.replace("℃","").astype('int32')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处理的链式操作 

1、先将日期2018-03-31替换成20180331的形式
2、提取月份字符串201803

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 

 

  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值