Task02-Pandas基础

本文档回顾了Pandas的基础知识,包括如何使用`sep`参数自定义分隔符读取文件,将表格转换为Markdown和LaTeX格式,以及Pandas库中的窗口对象。讲解了滑动窗口和扩张窗口的概念,并提供了向后滑窗操作的实现思路。最后,给出了作业题目T1和T2供读者练习。

学习目标:

Task02-Pandas基础


学习内容:

1、 一些自己之前忘记的东西
2、 窗口对象
3、 Pandas库函数总结
4、练习题


学习产出:

一些之前自己忘记的东西

  1. 在读取 txt 文件时,经常遇到分隔符非空格的情况, read_table 有一个分割参数 sep ,它使得用户可以自定义分割符号,进行 txt 数据的读取。例如,下面的读取的表以 |||| 为分割:

在这里插入图片描述
这里注意sep是正则表达式,需要转义。需要将’engine’指定为python否则:

ParserWarning: Falling back to the ‘python’ engine because the ‘c’ engine does not support regex separators (separators > 1 char and different from ‘\s+’ are interpreted as regex); you can avoid this warning by specifying engine=‘python’.

  1. 如果想要把表格快速转换为 markdownlatex 语言,可以使用 to_markdownto_latex 函数,此处需要安装 tabulate 包。

在这里插入图片描述
此前我都是使用Typora的开源编辑器导入表格的,这里猜测Typora是不是也是这样用的呢?

Pandas库函数总结

引用模块 函数/属性名 实例 说明
import pandas as pd
1) pandas数据结构
Series() obj1=Series([4,7,5,3],index=[‘d’,‘b’,‘a’,‘c’]) #创建带索引的Series states=[‘California’,‘Ohio’,‘Oregon’] #使用字典创建Series obj3=Series(sdata,index=states) 创建Series
Series()
DataFrame() frame2=([1,2,3,],[4,5,6],columns=[‘a’,‘b’,‘c’],index=[‘x’,‘y’]) 创建DataFrame
基于索引名选取 obj[ col ] 选取某列
obj[ colList ] students[[‘height’,‘weight’]] 选取某几列
obj.loc[ index, col ] 选取某行某列
obj.loc[ indexList, colList ] 选取多行多列
基于位置序号选取 obj.iloc[ iloc, cloc] 选取某行某列
obj.iloc[ ilocList, clocList ] 选取多行多列
obj.iloc[ a:b, c:d ] students.iloc[1:, 0:2] 选取a~(b-1)行, c~(d-1)列
条件筛选 obj.loc[ condition, colList ] students.loc[ students[‘height’]>=168, [‘height’,‘weight’] ] 使用索引构造条件表达式,选取满足条件的行
obj.iloc[ condition, clocList ] 使用位置序号构造条件表达式,选取满足条件的行
obj[colname] = list students[‘expense’] = [1500,1600,1200] 添加新列
obj.drop(collist, axis, inplace,…) students.drop(1, axis=0) students.drop(‘expense’, axis=1) 删除某几列
2) 数据文件读写
pd.read_csv() pd.read_csv(‘1111.csv’) 读取CSV文件数据(带分隔符的数据,默认为逗号)
object.to_csv() ts = Series(np.arange(7), index=dates) ts.to_csv(‘ch06/tseries.csv’) 将DataFrame或Series中的数据写到一个以逗号分隔的文件中
pd.read_excel() pd.read_excal(‘a.xlsx’) 从excel文件中读取数据
skiprows参数 pd.read_csv(‘ch06/ex4.csv’, skiprows=[0, 2, 3]) #跳过文件的第一行、第三行和第四行 跳过文件中的某些行
na_values参数 pd.read_csv(‘ch06/ex5.csv’ ,na_values=[‘NULL’]) 可以接受一组用于表示缺失值的字符串
nrows参数 pd.read_csv(‘ch06/ex6.csv’ , nrows=5) #nrows=5表示读取前5行 逐行读取文本文件
delimiter参数 reader = csv.reader(f, delimiter= ‘|’) 用于分隔字段的单字符字符串。默认’,’
3) 数据清洗
dataframe.dropna() data1.dropna(thresh=3) #thresh代表保留几个有效值 滤除缺失数据
dataframe.fillna() df1.fillna(0) stu.fillna({‘年龄’:20, ‘体重’:stu[‘体重’].mean()} ) method=‘ffill’ method=‘bfill’ 填充缺失数据
dataframe.drop_duplicates() df1.drop_duplicates() 去除重复数据
dataframe.isnull() stu.isnull() 检测每个元素值是否是NaN
dataframe.any() stu.isnull().any() 按行或列检测是否有值为Flase
4) 数据规整化
pd.concat() pd.concat([s1, s2, s3]) #默认情况下,concat按照行叠加 轴向连接函数,沿着指定轴将多个对象堆叠到一起
pd.merge() pd.merge(newstu,card, how=‘left’, left_on=‘学号’, right_on=‘ID’) 按照给定列连接两张表中数据
dataframe.sort_values() stu.sort_values(by=‘成绩’, ascending=False) 按照给定列排序
dataframe.rank() stu[‘成绩’].rank(method=‘min’, ascending=False) 按照指定轴给出每个数据排名
5) 统计分析
sr.value_counts() Series各取值出现的频数
sr.unique() Series出现的值
sr.describe() stu[[‘身高’,‘体重’,‘成绩’]].describe() 返回基本统计量和分位数
sr1.corr(sr2) stu[‘身高’].corr( stu[‘体重’] ) sr1与sr2的相关系数
df.corr() stu[[‘身高’,‘体重’,‘成绩’] ].corr() df各列的相关系数
df.count() 统计每列数据个数
df.max()、df.min() 最大值和最小值
df.idxmax()、df.idxmin() 最大值、最小值对应的索引
df.sum() 按行或列求和
df.mean()、df.median() stu[‘成绩’].mean() 计算均值、中位数
df.qantile() tu[‘月生活费’].quantile( [.25, .75] ) 计算给定的四分位数
df.var()、df.std() 计算方差、标准差
df.mode() 计算众数
df.cumsum() 从0开始向前累加各元素
df.cov() stu[[‘身高’,‘体重’,‘成绩’] ].corr() 计算协方差矩阵
pd.crosstab(df[col1],df[col2]) pd.crosstab( stu[‘性别’], stu[‘月生活费’]) pandas函数,交叉表,计算分组的频率
dataframe.groupby() grouped = stu.groupby([‘性别’, ‘年龄’]) 按照指定索引将数据划分为多个组
grouped.aggregate() grouped.aggregate( {‘身高’:np.mean, ‘月生活费’:np.max } ) 按照给定统计方法分组统计

窗口对象

  1. 滑窗对象
In [95]: s = pd.Series([1,2,3,4,5])

In [96]: roller = s.rolling(window = 3)

In [97]: roller
Out[97]: Rolling [window=3,center=False,axis=0]

在得到了滑窗对象后,能够使用相应的聚合函数进行计算,需要注意的是窗口包含当前行所在的元素,例如在第四个位置进行均值运算时,应当计算(2+3+4)/3,而不是(1+2+3)/3:

In [98]: roller.mean()
Out[98]: 
0    NaN
1    NaN
2    2.0
3    3.0
4    4.0
dtype: float64

In [99]: roller.sum()
Out[99]: 
0     NaN
1     NaN
2     6.0
3     9.0
4    12.0
dtype: float64

rolling对象的默认窗口方向都是向前的,某些情况下用户需要向后的窗口,例如对1,2,3设定向后窗口为2的sum操作,结果为3,5,NaN,此时应该如何实现向后的滑窗操作?(提示:使用shift)

我的想法:把series倒过来,然后相对于原rolling即为向后滑窗,最后再倒过来。

s = pd.Series([1, 2, 3, 4, 5])
roller = s[::-1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值