学习目标:
学习内容:
1、 一些自己之前忘记的东西
2、 窗口对象
3、 Pandas库函数总结
4、练习题
学习产出:
一些之前自己忘记的东西
-
在读取
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’.
-
如果想要把表格快速转换为
markdown和latex语言,可以使用to_markdown和to_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 } ) | 按照给定统计方法分组统计 |
窗口对象
- 滑窗对象
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

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

3203

被折叠的 条评论
为什么被折叠?



