Pandas数据分析(中)|一文入门pandas数据处理

本文包括以下几部分

    • 数据筛选

    • 数据统计

    • 空值/NaN处理

    • 字符类型处理

    • 时间序列类型处理

数据筛选

按照筛选方式的不同,可以将数据筛选分为以下两种:

  • 通过表达式/布尔值筛选数据
  • 使用where方法筛选数据

两者的区别在于前者返回满足条件的数据,后者将不满足条件的以NaN值填充。

#测试数据data = pd.read_excel('test.xlsx',index_col=0)

使用表达式/布尔值筛选,即直接在“下标”中写出过滤条件,返回满足条件的数据。

#查看性别为女的数据data[data['性别'] == '女']

使用where()方法筛选数据,通过DataFrame.where(表达式) 可以筛选出满足条件的数据,同时不满足表达式的数据将以“NaN”值填充并一起返回。

data.where(data['年龄']>17)

数据统计

pandas提供一些函数实现对Series/DataFrame数据常见的数学或统计计算。

普通统计函数:

count() #统计非空值mean() #平均值median() #中位数min() #最小值max() #最大值std() #标准差var() #方差cov() #协方差矩阵corr() # 连续变量的相关系数describe() #统计汇总

分组/交叉统计:

groupby() # 和SQL分组指令一样。pivot_table(    values=None,    index=None,    columns=None,    aggfunc='mean',    fill_value=None,    margins=False,    dropna=True,    margins_name='All',    observed=False,)

#样例数据2np.random.seed(20220518) #随机种子data1 = pd.DataFrame(np.random.normal(2,3,(100,5)),                    columns=['a','b','c','d','e'])data1.head()

# 列b的平均值data1['b'].mean() round(data1['b'].mean(),3) # 保留3位小数data1['b'].median()data1['b'].max()
 

输出:

2.486358794605031

2.486
2.127531746420967

9.90200833974934

使用describe()方法完成快速统计

data1.describe()

以上是针对数值类型做统计计算,当对非数据类型运行describe()时,将统计以下内容:

count() #非空数据unique()#去掉重复值的数量top()   # 出现频率最多的值frep()  #top值的数量
data['性别'].describe()
count     6
unique    2
top       男
freq      4
Name: 性别, dtype: object

空值/缺失值处理

本节介绍DataFrame处理缺失值的四个重要函数:

  • isnull()     -判断空值/NaN值
  • notnull()  -判断非空值/NaN
  • dropna() -删除空值/NaN
  • fillna()     -填充空值/NaN
#样例数据2data2 = pd.DataFrame([[np.nan, 2, np.nan, 0],                    [3, 4, np.nan, 1],                    [np.nan, np.nan, np.nan, 5],                    [np.nan, 3, np.nan, 4]],                   columns=list('ABCD'))data2

#判断为空值data2.isnull()

#判断非空值data2.notnull()

#删除空值 --默认按行 axis=0 或 axis='index'data2.dropna()

当指定axis=0/axis='index'时(默认),凡是一行包含缺失值,则整行删除。因此上面返回空。

当指定axis=1/axis='columns'时,凡是此列中包含空值,则整列删除。如下

#删除空值-- 按列 axis=1 或 axis='columns'data2.dropna(axis=1)

#填充空值--指定值100填充全部空值data2.fillna(value=100)

#填充空值--指定列和对应列填充值fill_values = {'A': 8, 'B': 9, 'C': 99, 'D': 66}data2.fillna(value=fill_values)

#填充空值--指定填充方式method 默认None#向后填充 method='bfill' data2.fillna(method='bfill')data2.fillna(method='bfill',axis=1)#向前填充 method='ffill'data2.fillna(method='ffill')

原始

向后填充

向后填充,且axis=1

向前填充

字符类型处理

Pandas提供一些类似python的字符处理函数,来高效的处理字符串。

这些函数可以非常方便的操作字符串类型的Series对象(DataFrame的一列就是一个Series)。

区别于Pytho操作字符串的函数/方法,Pandas中用来处理字符类型的Series通常以str开头。方法名字和Python内置字符串处理函数大多数一样。

此外,特别介绍一下在机器学习特征工程中常用的两个特殊方法get_dummies()-哑变量生成 和 to_nuumeric()-数值类型修复

常见字符处理函数:

#大小写转换str.lower()str.upper()#空白处理str.strip()str.lstrip()str.rstrip()#拆分str.split()#切片str.slice()#替换str.replace()#拼接str.cat()  #按照索引位置拼接 str.join() #指定连接符拼接#判断包含子字符串str.contain()str.startswith()str.endswith()str.match()str.findall() #提取符合指定正则模式的片段#子字符串提取str.extract()str.extractall()

#样例数据3data3 = pd.DataFrame({'a':['甲','乙',np.nan,'丁'],                      'b':['A','B','C','D']})data3

cat()会按照索引进行拼接,遇到NaN会自动跳过。

指定连接符和NaN值填充

其余常见自符处理函数和Python自带的函数大多类似,因此例子省略。

get_dummies()

常常使用get_dummies()来处理某一列具有固定分隔符的字符串,使其生成哑变量。该方法在机器学习特征工程中十分常用。

 to_nuumeric()

使用Pandas导入外部文件时,当一列原本为数据类型的数据,某一单元格混入非数值的字符串时,将导致本来应为数据类型的值被转为Object类型。

如以下一个文件,C7单元格错入一个字符‘-’。

pandas读取文件并查看信息如下:

月薪这一列的数据类型变成了Object类型。

使用to_numeric() ,参数errors='coerce' 即可将其转为数据类型,并将不合法的异常值置为NaN。

变为NaN后就可以根据NaN值处理方法来处理了。十分好用~

日期与时间序列处理

这部分介绍时间日期类型定义及pandas日期时间序列的常见处理方法。

日期时间生成基础

  • 定义生成

     使用 datetime 包。

  • 解析生成

     1.dateutil包的parser

     2.pandas的to_datetime()

  • pands时间序列生成

     1. date_range()

     2.period_range()

定义生成
import datetime as dtprint(dt.time(12,34,56))print(dt.datetime(2022,12,1,12,32,56))
12:34:56
2022-12-01 12:32:56

解析生成(从非标准的包含日期时间内容的字符串中解析)

使用dateutil包

from dateutil import parserparser.parse('24th of May,2022')
datetime.datetime(2022, 5, 24, 0, 0)

pandas的to_datetime()方法

import pandas as pdpd.to_datetime('24th of May,2022')
Timestamp('2022-05-24 00:00:00')

时间序列生成

date_range()

pd.date_range(    start=None,    end=None,    periods=None,    freq=None)

period_range()

pd.period_range(start=None,                end=None,                 periods=None,                 freq=None,                 name=None)

时间序列索引

Pandas中时间类型可以作为索引,生成方法为Pandas的DatetimeIndex().

DateIndex = pd.DatetimeIndex(['2021-2-1','2021-3-1','2022-4-1','2022-5-1'])data5 = pd.Series([1,2,3,4],index=DateIndex)data5
2021-02-01    1
2021-03-01    2
2022-04-01    3
2022-05-01    4

dtype: int64

时间类型索引和普通索引一样使用。

data5['2022-02-01']

此外,pandas支持时间序列索引筛选,比如只看2022年的,索引会自动过滤掉其他年份的索引值。

data5['2022']

日期时间索引处理函数:

  • pct_change() -计算当前值与前一个值的变化率。

  • rolling() -对数据范围应用函数。

  • between_time() - 选取指定时间段的数据。

  • resample - 指定时间序列的频率采样。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas是一个强大的用于数据处理分析Python库,它提供了灵活的数据结构和功能丰富的工具,可以帮助我们轻松地进行数据的处理、清洗、转换和分析Pandas库提供了两种主要的数据结构,即序列(Series)和数据框(DataFrame)。序列是一种一维的数据结构,可以存储不同类型的数据,并且每个数据都有一个索引。数据框是二维的表格型数据结构,可以将多个序列整合在一个表格,每一列可以有不同的数据类型。 通过使用Pandas,我们可以方便地从各种数据源(包括CSV、Excel、数据库等)读取数据,然后对数据进行处理和分析Pandas提供了各种功能,如数据清洗(处理缺失值、重复值、异常值等),数据转换(合并、拆分、排序等),以及数据分析(统计分析、数据透视表、时间序列分析等)。 对于数据处理分析Pandas提供了丰富的函数和方法,例如可以通过使用筛选条件、索引、切片等操作来选取和修改数据,还可以进行数据的聚合、分组和操作。此外,Pandas还可以与其他Python库(如NumPy、Matplotlib)相结合使用,进一步拓展数据处理分析的功能。 Pandas数据处理分析的相关资源可以通过PDF文档和各类网盘进行下载和存储。通过阅读Pandas的官方文档,可以了解到Pandas提供的各种功能、方法和使用技巧。同时,许多网盘上也收集了大量的Pandas相关资料和教程,可以为我们学习和使用Pandas提供便利。 总之,Pandas是一个功能强大的Python库,对于数据处理分析非常有用。通过阅读Pandas的相关文档和教程,以及利用网络资源的PDF和网盘存储,我们可以更好地掌握Pandas的使用技巧,并在实际的数据处理分析工作发挥其作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值