zoukankan      html  css  js  c++  java
  • Pandas系列教程(9)Pandas字符串处理

    Pandas字符串处理

    前面我们已经使用了字符串处理函数:

      df['bWendu'].try.replace('℃', '').astype('int32')

    Pandas的字符串处理:

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

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

    3、DataFrame上没有str属性和处理方法;

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

    Series.str字符串方法列表参考文档

      https://pandas.pydata.org/pandas-docs/stable/reference/series.html#string-handing

    本节演示内容:

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

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

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

    4、使用正则表达式处理

     

    1、读取北京2018年天气数据

    import pandas as pd
    
    file_path = "../../datas/files/beijing_tianqi_2018.csv"
    df = pd.read_csv(file_path)
    print(df.head())
    print(df.dtypes)

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

    import pandas as pd
    
    file_path = "../../datas/files/beijing_tianqi_2018.csv"
    df = pd.read_csv(file_path)
    print('*' * 25, '打印前几行数据', '*' * 25)
    print(df.head())
    print('*' * 25, '打印每列数据类型', '*' * 25)
    print(df.dtypes)
    
    print('*' * 25, '获取Series的str属性', '*' * 25)
    print(df['bWendu'].str)
    
    print('*' * 25, '字符串替换函数', '*' * 25)
    df['bWendu'].str.replace('', '')
    
    print('*' * 25, '判断是不是数字', '*' * 25)
    print(df['bWendu'].str.isnumeric())
    
    print('*' * 25, '判断是不是数字', '*' * 25)
    print(df['aqi'].str.len())

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

    import pandas as pd
    
    file_path = "../../datas/files/beijing_tianqi_2018.csv"
    df = pd.read_csv(file_path)
    
    print('*' * 25, '打印前几行数据', '*' * 25)
    print(df.head())
    print('*' * 25, '打印每列数据类型', '*' * 25)
    print(df.dtypes)
    
    condition = df['ymd'].str.startswith('2018-03')
    print(condition)
    print(df[condition].head())

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

    怎样提取201803这样的数字月份?

    1、先将日期2018-03-31替换成20180331的形式

    2、提取月份字符串201803

    import pandas as pd
    
    file_path = "../../datas/files/beijing_tianqi_2018.csv"
    df = pd.read_csv(file_path)
    
    print('*' * 25, '打印前几行数据', '*' * 25)
    print(df.head())
    print('*' * 25, '打印每列数据类型', '*' * 25)
    print(df.dtypes)
    
    # 先将日期2018-03-31替换成20180331的形式
    print('*' * 50)
    print(df['ymd'].str.replace('-', ''))
    
    # 每次调用函数,都返回一个新的Series
    # df['ymd'].str.replace('-', '').slice(0, 6)    # 错误写法
    print('*' * 50)
    print(df['ymd'].str.replace('-', '').str.slice(0, 6))
    
    # slice就是切片语法,可以直接使用
    print('*' * 50)
    print(df['ymd'].str.replace('-', '').str[0:6])

    5、使用正则表达式处理

    import pandas as pd
    
    file_path = "../../datas/files/beijing_tianqi_2018.csv"
    df = pd.read_csv(file_path)
    
    print('*' * 25, '打印前几行数据', '*' * 25)
    print(df.head())
    print('*' * 25, '打印每列数据类型', '*' * 25)
    print(df.dtypes)
    
    
    # 添加新列
    print('*' * 25, '添加新列', '*' * 25)
    def get_nianyyueri(x):
        year, month, day = x['ymd'].split('-')
        return f'{year}年{month}月{day}日'
    
    df['中文日期'] = df.apply(get_nianyyueri, axis=1)
    print(df['中文日期'])
    
    # 问题:怎样将"2018年12月31日"中的年、月、日三个中文字符去掉
    # 方法1:链式replace
    # print(df['中文日期'].str.replace('年', '').str.replace('月', '').str.replace('日', ''))
    
    # 方法2:正则表达式替换(推荐使用)
    # Series.str默认就开启了正则表达式模式
    print('*' * 25, '正则表达式替换', '*' * 25)
    print(df['中文日期'].str.replace('[年月日]', ''))
  • 相关阅读:
    当你不知道今天星期几,不妨在编辑器写下这段代码
    自定义注解!绝对是程序员装逼的利器!!
    什么是可串行化MVCC
    Jetpack新成员,一篇文章带你玩转Hilt和依赖注入
    连接真机开发安卓(Android)移动app MUI框架 添加购物车等——混合式开发(四)
    从前世今生聊一聊,大厂为啥亲睐时序数据库
    工作五年,面试官说我只会CRUD!竟然只给我10K!
    bootstrap知识总结
    数据处理的两个基本问题05 零基础入门学习汇编语言42
    转移指令的原理02 零基础入门学习汇编语言44
  • 原文地址:https://www.cnblogs.com/xingxingnbsp/p/13851864.html
Copyright © 2011-2022 走看看