第一章 Pandas基础综述

前言

Pandas系列是基于Pandas 1.0.3 版本编写的,查看Pandas版本号方法如下:

import pandas as pd
pd.__version__

Pandas升级命令:

pip install --upgrade pandas

温馨提示,如果遇到ReadTimeoutError,可切换成国内镜像源或者尝试以下命令:

pip install --default-timeout=100 --upgrade pandas

有人说把代理模式切换成全局模式也能解决这个问题,大家可以试试。

文件读取&写出

文件读取

Pandas可将表格型数据读取成DataFrame对象,命令格式通常是:pandas.read_文件类型(参数)
pandas的系解析函数
解析函数中除了可以输入文件所在位置,还能指定读取方式,如常用的read_csv()和read_table()函数常用的设置参数如下:
read_csv / read_table 函数的参数

文件写出

同样地,Pandas也可将Series和DataFrame对象也写出到文本格式。命令格式通常是:pandas.to_文件类型(参数)。例如:

df.to_csv('data/new_table.csv', encoding='utf-8', index=False) # 写出的csv文件编码格式为utf-8,保存时去索引

df.to_excel('data/new_table2.xlsx', sheet_name='Sheet1') # 指定存放的工作表位置

基本数据结构

Pandas有两个主要的数据结构:Series和DataFrame。简单地说,我们可以将Series理解为一维向量,而DataFrame则是多维向量。

Series

对于一个Series,其中最常用的属性为values,index,name,dtype。

# 创建Series
s1 = pd.Series([1,2,3,4,np.nan,5,6,7]) # 传入一个列表
s2 = pd.Series([21,23,42,21,23],index=['Jack','Lucy','Helen','Milky','Jasper']) # 指定索引
s3 = ps.Series(np.random.randn(5), index=['a','b','c','d','e'],name='这是一个Series',dtype='float64') # 指定Series的name

# 访问Series属性
s3.values # 查看值
s3.name # 查看值的名字,查看索引的名字s3.index.name,此处未指定索引的名字
s3.index  # 查看索引
s3.dtype # 查看值的数据类型

Series有很多可调用的方法,可使用以下命令查看这些方法名:

print([i for i in dir(s3) if not i.startswith('_')])

DataFrame

对于一个Series,其中最常用的属性为index,columns,shape,values等。

# 创建DataFrame
df1 = pd.DataFrame({'Student_1':[90,100, 95], 'Student_2':[60, 80, 100]}, index=['Monday', 'Wednesday', 'Friday']) # 通过传入一个字典和索引列表实现
df2 = pd.DataFrame([[1, 2, 3], [4, 5, 6]], index=['A', 'B'], columns=['C1', 'C2', 'C3']) # 通过传入值列表、索引列表和列名实现

# 访问DataFrame属性
df1.shape # 查看数据形状,返回值为(行数, 列数)
df1.columns # 查看所有列名
df1.index  # 查看索引
df1.values # 查看值
df1.dtypes # 查看值的数据类型,Series的是s.dtype,此处dtype是复数形式

# 修改行或列名
df1.rename(index={'Monday':'Tuesday'}, columns={'Student_1':'Student_0'}) # 通过rename()方法修改
df2.columns = ['C4', 'C5', 'C6'] # 直接修改columns属性

DataFrame也有很多可调用的方法,可使用以下命令查看这些方法名:

print([i for i in dir(df2) if not i.startswith('_')])

对于DataFrame:

  1. 删除列:1)DataFrame.drop(columns='列名');2)del DataFrame['列名'];3)DataFrame.pop('列名')
  2. 删除行:1)DataFrame.drop(index='索引')
  3. 增加列:1)DataFrame['列名']=值列表(会直接对原来的DataFrame做修改);2)DataFrame.insert()(会直接对原来的DataFrame做修改);3)DataFrame.assign(列名=值列表)(不会直接对原来的DataFrame做修改)
  4. 根据数据类型选取列:DataFrame.select_dtypes(include=['数据类型'])

Series和DataFrame的联系

上文提到,我们可以将Series理解为一维向量,而DataFrame则是多维向量。也就是说DataFrame可以理解为是多个Series组成的,即Series可以转换成DataFrame,转换方法如下:

df = s1.to_frame(name='val') # 用name指定df的列名

df.T # 转置

当然,Pandas的强大特性之一就是索引对其特性,这是Series和DataFrame对象都有的特性。

常用的基本函数

以下函数示例主要针对DataFrame对象。

# 1. 查看前/后几条记录
df1.head() # 查看前5条记录
df1.tail() # 查看后5条记录

# 2. 查看唯一值个数和唯一值列表
df1['Tuesday'].nunique() # 唯一值个数
df1['Tuesday'].unique() # 唯一值列表

# 3. 查看元素个数
df1['Tuesday'].count() # count()返回非缺失值元素个数
df1['Tuesday'].value_counts() # value_count返回非缺失值每个元素有多少个

# 4. 查看数据简单描述
df1.info()
df1.describe() # describe默认统计数值型数据的各个统计量,非数值型变量需与数值型数据分开使用,能获取count, unique, top, freq属性
df1.describe(percentiles=[.05, .25, .75, .95]) # 自行选取分位数
# 其他统计函数
d1.idxmin() # 最小值的索引位置
d1.idxmax() # 最大值的索引位置
df1.quantile(0.1) # 10%分位数
df1.max() # 最大值
df1.min() # 最小值
df1.abs() #绝对值
df1.sum() # 求和
df1.cummax() # 样本值的累计最大值
df1.cumsum() # 样本值的累加值
df1.cumprod() # 样本值的累乘值
df1.mean() # 均值
df1.median() # 中位数
df1.mode() # 众数
df1.var() # 方差
df1.std() # 标准差
df1.mad() # 平均绝对偏差
df1.skew() # 偏度
df1.kurt() # 峰度

# 5. 截断
df1['Tuesday'].clip(20, 70) # 对Tuesday中低于20,高于70的值进行截断

# 6. 索引排序和设置
df1.set_index('Student2') # 将'Student2'设为index
df1.reset_index() # 索引被移到列里边
df1.set_index('Student2').sort_index(ascending=False) # 索引降序排序,默认升序

# 7. 值排序
df1.sort_values(by='Student2') # 也可以进行多值排序,传入列表即可

在使用Pandas进行统计分析的时候,经常用到apply()函数。Pandas 的 apply 函数可以作用于 Series 或者整个 DataFrame,功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。apply函数的参数可以是匿名函数lambda(),也可以是其他函数。

此外,还需关注axis参数。axis是Pandas和NumPy的很多函数都存在的参数,传入axis参数可以指定在哪个轴上操作。关于axis参数的理解可参考:https://blog.csdn.net/liuweiyuxiang/article/details/80895844。简单地说,对于二维数组,axis=0就对应shape第0个元素对应的维度,axis=1对应shape第1个元素对应的维度。换句话说:

  1. axis=0表示沿着每一列或行标签\索引值向下执行方法 (跨行方向)
  2. axis=1值表示沿着每一列或行标签\索引值向下执行方法(跨列方向)
    DataFrame的axis含义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值