前面我们已经使用了字符串的处理函数:
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.使用正则表达式的处理
import pandas as pd
fpath='./datas/beijing_tianqi/beijing_tianqi_2018.csv'
df=pd.read_csv(fpath)
df.head()
df.dtypes
获取最高温度的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()方法只能用于字符串类型的数据
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()
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]
#添加新列
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