简介

  • Pandas是一个用于处理高级数据结构和数据分析的Python库。基于Numpy构建的一种工具,纳入了大量模块和库一些标准的数据模型,提高python处理大数据的性能。广泛应用于金融、经济、数据分析、统计等商业领域,为从业者提供了便捷。
  • 特点:

    • 支持Dataframe格式,自定义索引,Dataframe是一种高效快速的数据结构对象
    • 可以将不同格式的数据文件加载到内存中
    • 可处理时间序列或非时间序列数据
    • 可基于标签来切片索引,获得大数据集子集
    • 可进行高性能数据分组、聚合、添加、删除
    • 未对齐及索引方式不同的数据可按轴自动对齐
    • 灵活处理数据缺失、重组、空格

      安装

      1. # python -m pip会使用您指定为python的Python解释器来执行pip
      2. python -m pip install pandas

      数据结构

  • 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)

  1. - ** Series的索引和切片**<br />通过Seriesvalueindex属性可以获取Series中的索引和数值
  2. ```python
  3. # Series索引和切片
  4. print('s2的索引:',s2.index)
  5. print('s2的值:',s2.values)
  6. # 通过索引获取值或者修改(索引是不可以修改的)
  7. # 单索引
  8. print('s2中二对应的值',s2['二'])
  9. s2['二'] = 5
  10. print('s2中二对应的值',s2['二'])
  11. # 多索引
  12. print('s2中二、四对应的值',s2[['二','四']])
  13. # 对于连续索引可以使用冒号
  14. print('s2中二到四对应的值',s2['二':'四'])
  1. - ** 字典类型数据创建Series **
  1. # 字典类型数据创建Series
  2. week_dict = {'星期一':1,'星期二':2,'星期三':3,'星期四':4,'星期五':5,'星期六':6,'星期日':7}
  3. s3 = pd.Series(week_dict)
  4. print('s3: ',s3)
  5. # 按照指定顺序将字典类型转换为Series
  6. s4 = pd.Series(week_dict,index=['星期日','星期一','星期二','星期三','星期四','星期五','星期六'])
  7. print('s4: ',s4)
  8. # 查看某些元素是否在Series数组中
  9. print('s4中含有星期八','星期八' in s4)
  10. print('s4中不含有星期八','星期八' not in s4)
  11. # 查看是否存在缺失值
  12. s5 = pd.Series(week_dict,index=['星期八','星期一','星期二','星期三','星期四','星期五','星期六'])
  13. print('s5: ',s5)
  14. print('s5数据缺失',s5.isnull())
  15. print('s5数据不缺失',s5.notnull())
  1. - Series的算术运算
  1. # Series数组运算数据自动对齐(不存在的索引做NaN缺失处理)
  2. print('s4+s5:',s4+s5)

DataFrame

  • DataFrame是二维表格型数据结构,行索引和列索引都有,每一列的元素可能是不同类型的数据
    • DataFrame的构建 ```python

      DataFrame的创建

      student_dict={ ‘姓名’:[‘张三’,’李四’,’王五’,’麻六’], ‘性别’:[‘男’,’女’,’女’,’男’], ‘年龄’:[20,18,21,22] } df = pd.DataFrame(student_dict) print(‘df:’,df)

指定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)

  1. - ** DataFrame的索引 **
  2. ```python
  3. #列
  4. print('df3中姓名列:',df3['姓名'])
  5. print('df3中姓名列:',df3.姓名)
  6. #行
  7. print('df3中序号是2的行:',df3.loc[2])
  8. #索引修改值
  9. df3['班级'] =np.arange(4)
  10. print('df3:',df3)
  11. # 或者
  12. df3['班级'] =pd.Series([2,4],index=[0,2])
  13. print('df3:',df3)
  14. # 不存在的columns赋值时会创建新列
  15. df3['表现'] = pd.Series(['好','良好','良好','差'])
  16. print('df3:',df3)

统计计算

  • 常用的DataFrame数据统计函数
    | 函数 | 说明 | | —- | —- | | mean | 均值 | | median | 中位数 | | count | 非缺失值数量 | | min、max | 最小值、最大值 | | describe | 汇总统计 | | var | 方差 | | std | 标准差 | | skew | 偏度 | | kurt | 峰度 | | diff | 一阶差分 | | cummin、cummax | 累计最小值、累计最大值 | | cumsum、sumprod | 累计和、累计积 | | cov、corr | 协方差、相关系数 |
  1. # DataFrame 统计运算
  2. df4 = pd.DataFrame([[1,2,3,4],[4,3,2,1],[1,2,3,4],[4,3,2,1]],
  3. index=['a','b','c','d'],columns=['一','二','三','四'])
  4. print("df4:" ,df4)
  5. # sum()求和(如果数据中存在缺失值,计算时会自动跳过缺失值)
  6. print('df4按列求和:',df4.sum())
  7. print('df4按行求和:',df4.sum(axis=1))
  8. # cumsum() 累计求和
  9. print('df4从上到下累计求和:',df4.cumsum())
  10. print('df4从左到右累计求和:',df4.cumsum(axis=1))
  11. ......
  12. 其他函数自己实践

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) | 从字典对象中读取数据 |
  1. # 读取文件
  2. df5 = pd.read_csv('df4.csv',encoding='utf-8')
  3. 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) | 写入数据到剪切贴板中 |
  1. # 写文件
  2. df4.to_csv('df4.csv',sep=',',encoding='utf-8')

数据处理

  • 缺失值处理

    • 缺失值在数据中的主要三种表现:
      1. 不存在型空值,无法获取的值
      2. 存在型空值,样本的该特征是存在的,只是暂时无法获取数据
      3. 占位型空值,无法确定是不存在型空值还是存在型空值,最不确定的一种
    • 查找缺失值

      1. # 查找缺失值
      2. df6 = pd.DataFrame([[1,2,3,4],[4,np.nan,2,1],[1,2,np.nan,4],[4,3,2,1]],
      3. index=['a','b','c','d'],columns=['一','二','三','四'])
      4. print("df6:" ,df6)
      5. print('判断df6中缺失值:',df6.isnull())
      6. 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]],

      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))

  1. - 填充缺失值
  2. ```python
  3. # 填充缺失值
  4. df9 = pd.DataFrame([[1,2,3,4],[4,np.nan,2,1],[1,2,np.nan,4],[4,3,2,1]],
  5. index=['a','b','c','d'],columns=['一','二','三','四'])
  6. print('df9:',df9)
  7. print('使用0填充缺失值:',df9.fillna(0))
  8. print('中位数填充缺失值:',df9.fillna(df9.median()))
  9. print('向上填充缺失值:',df9.ffill())
  10. print('向下填充缺失值:',df9.bfill())
  • 重复值处理
    • 查找重复值
    • 去除重复值
      ```python

      查找重复值

      df10 = pd.DataFrame([[1,2,3,4],[4,3,2,1],[1,2,3,4],[4,3,2,1]],
      1. index=['a','b','c','d'],columns=['一','二','三','四'])
      print(‘df10:’,df10) print(‘是否存在重复:’,df10[df10.duplicated()]) print(‘是否前两列存在重复:’,df10[df10.duplicated(subset=[‘一’,’二’])])

去除重复值

print(‘去除重复值:’,df10.drop_duplicates(subset=[‘一’,’二’],keep=’first’))

  1. - **数据记录合并与分组 **
  2. - 使用append函数合并数据
  3. - 使用concat函数合并数据
  4. - 使用merge函数合并数据
  5. ```python
  6. df11 = pd.DataFrame([[1,2,3,4],[2,3,2,1],[3,2,3,4],[4,3,2,1]],
  7. index=['a','b','c','d'],columns=['一','二','三','四'])
  8. df12 = pd.DataFrame([[1,6],[2,7],[3,8],[4,9]],
  9. index=['a','b','c','d'],columns=['一','八'])
  10. print('append函数合并记录:',df11.append(df12))
  11. print('concat函数合并记录,df11和df12上下连接:',pd.concat([df11,df12]))
  12. print('concat函数合并记录,df11和df12左右连接:',pd.concat([df11,df12],axis=1,sort=False))
  13. print('merge函数合并记录:',pd.merge(df11,df12,left_on='一',right_on='一',how='left'))

  • 当才华还配不上野心,就静下来学习