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()

Part 9:Pandas 的字符串处理操作_第1张图片

df.dtypes

Part 9:Pandas 的字符串处理操作_第2张图片

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

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

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

 

字符串替换函数

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

Part 9:Pandas 的字符串处理操作_第3张图片

判断是不是数字

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


Part 9:Pandas 的字符串处理操作_第4张图片

 

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

Part 9:Pandas 的字符串处理操作_第5张图片

 

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

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

Part 9:Pandas 的字符串处理操作_第6张图片

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

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

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

Part 9:Pandas 的字符串处理操作_第7张图片

问题:直接在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)

Part 9:Pandas 的字符串处理操作_第8张图片

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

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

Part 9:Pandas 的字符串处理操作_第9张图片

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

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

Part 9:Pandas 的字符串处理操作_第10张图片 

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

方法1:链式replace

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

Part 9:Pandas 的字符串处理操作_第11张图片 

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

方法2:正则表达式替换
 

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

Part 9:Pandas 的字符串处理操作_第12张图片
 

注:

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 

 

你可能感兴趣的:(Pandas,pandas,python,数据分析)