• 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、分步骤读取数据

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

    df.dtypes

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

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

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

     

    字符串替换函数

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

    判断是不是数字

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


     

    1. df['aqi'].str.len()
    2. #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类型
     

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

     

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

    1. #输出在condition条件下的df中的数据
    2. 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调用后才可以使用

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

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

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

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

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

     

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

    方法1:链式replace

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

     

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

    方法2:正则表达式替换
     

    1. #方法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 

     

  • 相关阅读:
    DLT介绍
    【线性系统理论】笔记二-状态转移矩阵+状态运动轨迹
    简述WPF中MVVM的设计思想
    Vim入门教程
    ASEMI整流桥KBU808参数,KBU808尺寸,KBU808大小
    深度学习(pytorch)——神经网络完整模型训练套路及其注意事项
    三、kotlin的类和对象(一)
    Linux网络设置
    Spark - 第12章 弹性分布式数据集
    国庆出游远程实测:ToDesk 、TeamViewer、AnyDesk远程控制软件稳定性
  • 原文地址:https://blog.csdn.net/qq_46044325/article/details/126839139