简介
- Pandas是一个用于处理高级数据结构和数据分析的Python库。基于Numpy构建的一种工具,纳入了大量模块和库一些标准的数据模型,提高python处理大数据的性能。广泛应用于金融、经济、数据分析、统计等商业领域,为从业者提供了便捷。
特点:
Series
Series类似一维数组,数组由数据与其索引标签组成,索引在左侧,值在右侧。- 创建Series数组 ```python import pandas as pd import numpy as np
创建Series数组
s1 = pd.Series([1,2,3,4]) print(“s1:”,s1)
创建Series数组并设置index参数
s2 = pd.Series([1,2,3,4],index=[‘一’,’二’,’三’,’四’]) print(“s2:”,s2)
- ** Series的索引和切片**<br />通过Series的value和index属性可以获取Series中的索引和数值```python# Series索引和切片print('s2的索引:',s2.index)print('s2的值:',s2.values)# 通过索引获取值或者修改(索引是不可以修改的)# 单索引print('s2中二对应的值',s2['二'])s2['二'] = 5print('s2中二对应的值',s2['二'])# 多索引print('s2中二、四对应的值',s2[['二','四']])# 对于连续索引可以使用冒号print('s2中二到四对应的值',s2['二':'四'])
- ** 字典类型数据创建Series **
# 字典类型数据创建Seriesweek_dict = {'星期一':1,'星期二':2,'星期三':3,'星期四':4,'星期五':5,'星期六':6,'星期日':7}s3 = pd.Series(week_dict)print('s3: ',s3)# 按照指定顺序将字典类型转换为Seriess4 = pd.Series(week_dict,index=['星期日','星期一','星期二','星期三','星期四','星期五','星期六'])print('s4: ',s4)# 查看某些元素是否在Series数组中print('s4中含有星期八','星期八' in s4)print('s4中不含有星期八','星期八' not in s4)# 查看是否存在缺失值s5 = pd.Series(week_dict,index=['星期八','星期一','星期二','星期三','星期四','星期五','星期六'])print('s5: ',s5)print('s5数据缺失',s5.isnull())print('s5数据不缺失',s5.notnull())
- Series的算术运算
# Series数组运算数据自动对齐(不存在的索引做NaN缺失处理)print('s4+s5:',s4+s5)
DataFrame
- DataFrame是二维表格型数据结构,行索引和列索引都有,每一列的元素可能是不同类型的数据
指定columns的顺序
df2 = pd.DataFrame(student_dict,columns=[‘性别’,’年龄’,’姓名’]) print(‘df2:’,df2)
columns中含有值与字典key值不匹配时,NaN处理
df3 = pd.DataFrame(student_dict,columns=[‘性别’,’年龄’,’姓名’,’班级’]) print(‘df3:’,df3)
设置DataFrame的表头(列名称和行索引名称)
df3.index.name =’序列’ df3.columns.name = ‘属性’ print(‘df3:’,df3)
values函数获取DataFrame中所用数据
print(‘df3的values值:’,df3.values)
- ** DataFrame的索引 **```python#列print('df3中姓名列:',df3['姓名'])print('df3中姓名列:',df3.姓名)#行print('df3中序号是2的行:',df3.loc[2])#索引修改值df3['班级'] =np.arange(4)print('df3:',df3)# 或者df3['班级'] =pd.Series([2,4],index=[0,2])print('df3:',df3)# 不存在的columns赋值时会创建新列df3['表现'] = pd.Series(['好','良好','良好','差'])print('df3:',df3)
统计计算
- 常用的DataFrame数据统计函数
| 函数 | 说明 | | —- | —- | | mean | 均值 | | median | 中位数 | | count | 非缺失值数量 | | min、max | 最小值、最大值 | | describe | 汇总统计 | | var | 方差 | | std | 标准差 | | skew | 偏度 | | kurt | 峰度 | | diff | 一阶差分 | | cummin、cummax | 累计最小值、累计最大值 | | cumsum、sumprod | 累计和、累计积 | | cov、corr | 协方差、相关系数 |
# DataFrame 统计运算df4 = pd.DataFrame([[1,2,3,4],[4,3,2,1],[1,2,3,4],[4,3,2,1]],index=['a','b','c','d'],columns=['一','二','三','四'])print("df4:" ,df4)# sum()求和(如果数据中存在缺失值,计算时会自动跳过缺失值)print('df4按列求和:',df4.sum())print('df4按行求和:',df4.sum(axis=1))# cumsum() 累计求和print('df4从上到下累计求和:',df4.cumsum())print('df4从左到右累计求和:',df4.cumsum(axis=1))......其他函数自己实践
DataFrame的文件操作
- 读取文件
常用的读取文件函数(基于pandas):
| 函数 | 说明 | | —- | —- | | read_csv(filename) | 从csv文件读取数据,默认分隔符为,| | read_table(filename) | 从文本文件读取数据,默认分隔符为制表符 | | read_excel(filename) | 从Excel中读取数据 | | read_sql(query, connection_object) | 从SQL表/库读取数据 | | read_json(json_string) | 从json文件中读取数据 | | read_html(url) | 解析url、字符串或者html文件,提取数据表格 | | DataFrame(dict) | 从字典对象中读取数据 |
# 读取文件df5 = pd.read_csv('df4.csv',encoding='utf-8')print("df5:",df5)
- 写入文件
常用的写入文件函数(基于DataFrame):
| 函数 | 说明 | | —- | —- | | to_csv(filename) | 写入数据到csv文件 | | to_excel(filename) | 写入数据到Excel文件 | | to_sql(table_name,connection_object) | 写入数据到SQL表 | | to_json(filename) | 写入数据到json文件 | | to_html(filename) | 写入数据到html文件 | | to_clipboard(filename) | 写入数据到剪切贴板中 |
# 写文件df4.to_csv('df4.csv',sep=',',encoding='utf-8')
数据处理
缺失值处理
- 缺失值在数据中的主要三种表现:
- 不存在型空值,无法获取的值
- 存在型空值,样本的该特征是存在的,只是暂时无法获取数据
- 占位型空值,无法确定是不存在型空值还是存在型空值,最不确定的一种
查找缺失值
# 查找缺失值df6 = pd.DataFrame([[1,2,3,4],[4,np.nan,2,1],[1,2,np.nan,4],[4,3,2,1]],index=['a','b','c','d'],columns=['一','二','三','四'])print("df6:" ,df6)print('判断df6中缺失值:',df6.isnull())print('输出含有缺失值的行:',df6[df6.isnull().any(axis=1)])
过滤缺失值
```python过滤缺失值
df8 = pd.DataFrame([[1,2,3,4],[4,np.nan,2,1],[1,2,np.nan,4],[4,3,2,1]],
index=['a','b','c','d'],columns=['一','二','三','四'])
df7 = pd.Series([1,2,3,np.nan,5,6]) print(“df7:”,df7) print(“过滤df7缺失值:”,df7.dropna()) print(“df8:” ,df8) print(“过滤df8缺失值:”,df8.dropna())
- 缺失值在数据中的主要三种表现:
删除全为缺失值的行或者列
df8[‘五’] =np.NAN print(“df8:” ,df8) print(‘删除全为缺失值的列:’,df8.dropna(how=’all’,axis=1))
- 填充缺失值```python# 填充缺失值df9 = pd.DataFrame([[1,2,3,4],[4,np.nan,2,1],[1,2,np.nan,4],[4,3,2,1]],index=['a','b','c','d'],columns=['一','二','三','四'])print('df9:',df9)print('使用0填充缺失值:',df9.fillna(0))print('中位数填充缺失值:',df9.fillna(df9.median()))print('向上填充缺失值:',df9.ffill())print('向下填充缺失值:',df9.bfill())
- 重复值处理
去除重复值
print(‘去除重复值:’,df10.drop_duplicates(subset=[‘一’,’二’],keep=’first’))
- **数据记录合并与分组 **- 使用append函数合并数据- 使用concat函数合并数据- 使用merge函数合并数据```pythondf11 = pd.DataFrame([[1,2,3,4],[2,3,2,1],[3,2,3,4],[4,3,2,1]],index=['a','b','c','d'],columns=['一','二','三','四'])df12 = pd.DataFrame([[1,6],[2,7],[3,8],[4,9]],index=['a','b','c','d'],columns=['一','八'])print('append函数合并记录:',df11.append(df12))print('concat函数合并记录,df11和df12上下连接:',pd.concat([df11,df12]))print('concat函数合并记录,df11和df12左右连接:',pd.concat([df11,df12],axis=1,sort=False))print('merge函数合并记录:',pd.merge(df11,df12,left_on='一',right_on='一',how='left'))
- 当才华还配不上野心,就静下来学习
