简介
- 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['二'] = 5
print('s2中二对应的值',s2['二'])
# 多索引
print('s2中二、四对应的值',s2[['二','四']])
# 对于连续索引可以使用冒号
print('s2中二到四对应的值',s2['二':'四'])
- ** 字典类型数据创建Series **
# 字典类型数据创建Series
week_dict = {'星期一':1,'星期二':2,'星期三':3,'星期四':4,'星期五':5,'星期六':6,'星期日':7}
s3 = pd.Series(week_dict)
print('s3: ',s3)
# 按照指定顺序将字典类型转换为Series
s4 = 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函数合并数据
```python
df11 = 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'))
- 当才华还配不上野心,就静下来学习