保姆级教程 | Python科研数据分析专题(三)

  • 缺失值填补
    • 提取出X2的非缺失的部分,即交易日数据
    • 填补缺失值1:补0
    • 填补缺失值2:用平均值填充
    • 填补缺失值3:前向/后向填充

缺失值填补

Sim_Jackson | 2023

导入必要的第三方库

# 导入需要的第三方库
import pandas as pd
import os
import warnings
warnings.filterwarnings('ignore')
dir_ = r'D:\科研论文\Python\数据分析'
os.chdir(dir_)
files = os.listdir(dir_) # 将该地址下的文件都列出来
files
['data.xlsx', 'google.csv', 'reaseach_data.xlsx']
# 数据读取
df = pd.read_excel(files[-1]) # -1即为倒数第一个,'reaseach_data.xlsx'
df
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
0 2020-01-01 7200.17 NaN NaN 96.51 NaN NaN 2.19 3 10 26
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
3 2020-01-04 7410.66 NaN NaN NaN NaN NaN NaN 5 58 0
4 2020-01-05 7411.32 NaN NaN NaN NaN NaN NaN 5 36 0
... ... ... ... ... ... ... ... ... ... ... ...
1090 2022-12-27 16717.17 3829.25 NaN 104.20 79.87 21.65 5.21 47 58 0
1091 2022-12-28 16552.57 3783.22 1803.35 104.53 78.86 22.14 4.71 50 40 18
1092 2022-12-29 16642.34 3849.28 1813.75 103.97 78.71 21.44 4.56 51 67 44
1093 2022-12-30 16602.59 3839.50 NaN 103.49 80.51 21.67 4.43 42 53 25
1094 2022-12-31 16547.50 NaN NaN NaN NaN NaN NaN 34 46 0

1095 rows × 11 columns

df.isna().sum() # 数据的缺失值情况
time      0
X1        0
X2      338
X3      344
X4      312
X5      319
X6      334
X7      315
X8        0
X9        0
X10       0
dtype: int64

提取出X2的非缺失的部分,即交易日数据

df['X2'].fillna(0,inplace=True) # 将空值填充为0,非交易日的SP500数据填补为0.
df
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
0 2020-01-01 7200.17 0.00 NaN 96.51 NaN NaN 2.19 3 10 26
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
3 2020-01-04 7410.66 0.00 NaN NaN NaN NaN NaN 5 58 0
4 2020-01-05 7411.32 0.00 NaN NaN NaN NaN NaN 5 36 0
... ... ... ... ... ... ... ... ... ... ... ...
1090 2022-12-27 16717.17 3829.25 NaN 104.20 79.87 21.65 5.21 47 58 0
1091 2022-12-28 16552.57 3783.22 1803.35 104.53 78.86 22.14 4.71 50 40 18
1092 2022-12-29 16642.34 3849.28 1813.75 103.97 78.71 21.44 4.56 51 67 44
1093 2022-12-30 16602.59 3839.50 NaN 103.49 80.51 21.67 4.43 42 53 25
1094 2022-12-31 16547.50 0.00 NaN NaN NaN NaN NaN 34 46 0

1095 rows × 11 columns

# 提取交易日的数据
df1 = df[df['X2']!=0]
df1
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
5 2020-01-06 7769.22 3246.28 1573.10 96.62 62.83 13.85 2.15 7 46 14
6 2020-01-07 8163.69 3237.18 1567.85 96.96 62.69 13.79 2.16 7 35 17
7 2020-01-08 8079.86 3253.05 1571.95 97.34 59.98 13.45 2.15 10 53 57
... ... ... ... ... ... ... ... ... ... ... ...
1086 2022-12-23 16796.95 3844.82 NaN 104.32 79.35 20.87 5.12 44 65 12
1090 2022-12-27 16717.17 3829.25 NaN 104.20 79.87 21.65 5.21 47 58 0
1091 2022-12-28 16552.57 3783.22 1803.35 104.53 78.86 22.14 4.71 50 40 18
1092 2022-12-29 16642.34 3849.28 1813.75 103.97 78.71 21.44 4.56 51 67 44
1093 2022-12-30 16602.59 3839.50 NaN 103.49 80.51 21.67 4.43 42 53 25

757 rows × 11 columns

df1.isna().sum() # 数据的缺失值情况
time     0
X1       0
X2       0
X3      22
X4       0
X5       0
X6       1
X7       2
X8       0
X9       0
X10      0
dtype: int64

填补缺失值1:补0

df1
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
5 2020-01-06 7769.22 3246.28 1573.10 96.62 62.83 13.85 2.15 7 46 14
6 2020-01-07 8163.69 3237.18 1567.85 96.96 62.69 13.79 2.16 7 35 17
7 2020-01-08 8079.86 3253.05 1571.95 97.34 59.98 13.45 2.15 10 53 57
... ... ... ... ... ... ... ... ... ... ... ...
1086 2022-12-23 16796.95 3844.82 NaN 104.32 79.35 20.87 5.12 44 65 12
1090 2022-12-27 16717.17 3829.25 NaN 104.20 79.87 21.65 5.21 47 58 0
1091 2022-12-28 16552.57 3783.22 1803.35 104.53 78.86 22.14 4.71 50 40 18
1092 2022-12-29 16642.34 3849.28 1813.75 103.97 78.71 21.44 4.56 51 67 44
1093 2022-12-30 16602.59 3839.50 NaN 103.49 80.51 21.67 4.43 42 53 25

757 rows × 11 columns

df1.fillna(0)
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
5 2020-01-06 7769.22 3246.28 1573.10 96.62 62.83 13.85 2.15 7 46 14
6 2020-01-07 8163.69 3237.18 1567.85 96.96 62.69 13.79 2.16 7 35 17
7 2020-01-08 8079.86 3253.05 1571.95 97.34 59.98 13.45 2.15 10 53 57
... ... ... ... ... ... ... ... ... ... ... ...
1086 2022-12-23 16796.95 3844.82 0.00 104.32 79.35 20.87 5.12 44 65 12
1090 2022-12-27 16717.17 3829.25 0.00 104.20 79.87 21.65 5.21 47 58 0
1091 2022-12-28 16552.57 3783.22 1803.35 104.53 78.86 22.14 4.71 50 40 18
1092 2022-12-29 16642.34 3849.28 1813.75 103.97 78.71 21.44 4.56 51 67 44
1093 2022-12-30 16602.59 3839.50 0.00 103.49 80.51 21.67 4.43 42 53 25

757 rows × 11 columns

填补缺失值2:用平均值填充

trans={"X3":df1['X3'].mean(),"X6":df1['X6'].mean(),"X7":df1['X7'].mean()}
df1.fillna(value=trans,inplace=True)
df1
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 2020-01-02 6985.47 3257.85 1527.100000 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.750000 96.91 63.04 14.02 2.11 8 47 65
5 2020-01-06 7769.22 3246.28 1573.100000 96.62 62.83 13.85 2.15 7 46 14
6 2020-01-07 8163.69 3237.18 1567.850000 96.96 62.69 13.79 2.16 7 35 17
7 2020-01-08 8079.86 3253.05 1571.950000 97.34 59.98 13.45 2.15 10 53 57
... ... ... ... ... ... ... ... ... ... ... ...
1086 2022-12-23 16796.95 3844.82 1789.400408 104.32 79.35 20.87 5.12 44 65 12
1090 2022-12-27 16717.17 3829.25 1789.400408 104.20 79.87 21.65 5.21 47 58 0
1091 2022-12-28 16552.57 3783.22 1803.350000 104.53 78.86 22.14 4.71 50 40 18
1092 2022-12-29 16642.34 3849.28 1813.750000 103.97 78.71 21.44 4.56 51 67 44
1093 2022-12-30 16602.59 3839.50 1789.400408 103.49 80.51 21.67 4.43 42 53 25

757 rows × 11 columns

填补缺失值3:前向/后向填充

  • ffill:用缺失值前面的一个值代替缺失值

  • backfill/bfill:缺失值后面的一个值代替前面的缺失值

df.head(10)
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
0 2020-01-01 7200.17 0.00 NaN 96.51 NaN NaN 2.19 3 10 26
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
3 2020-01-04 7410.66 0.00 NaN NaN NaN NaN NaN 5 58 0
4 2020-01-05 7411.32 0.00 NaN NaN NaN NaN NaN 5 36 0
5 2020-01-06 7769.22 3246.28 1573.10 96.62 62.83 13.85 2.15 7 46 14
6 2020-01-07 8163.69 3237.18 1567.85 96.96 62.69 13.79 2.16 7 35 17
7 2020-01-08 8079.86 3253.05 1571.95 97.34 59.98 13.45 2.15 10 53 57
8 2020-01-09 7879.07 3274.70 1550.75 97.42 59.59 12.54 2.17 6 54 16
9 2020-01-10 8166.55 3265.35 1553.60 97.38 59.12 12.56 2.21 4 60 10
df.fillna(axis=0,method='ffill') # 用这一列前面的一个数填充
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
0 2020-01-01 7200.17 0.00 NaN 96.51 NaN NaN 2.19 3 10 26
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
3 2020-01-04 7410.66 0.00 1548.75 96.91 63.04 14.02 2.11 5 58 0
4 2020-01-05 7411.32 0.00 1548.75 96.91 63.04 14.02 2.11 5 36 0
... ... ... ... ... ... ... ... ... ... ... ...
1090 2022-12-27 16717.17 3829.25 1800.70 104.20 79.87 21.65 5.21 47 58 0
1091 2022-12-28 16552.57 3783.22 1803.35 104.53 78.86 22.14 4.71 50 40 18
1092 2022-12-29 16642.34 3849.28 1813.75 103.97 78.71 21.44 4.56 51 67 44
1093 2022-12-30 16602.59 3839.50 1813.75 103.49 80.51 21.67 4.43 42 53 25
1094 2022-12-31 16547.50 0.00 1813.75 103.49 80.51 21.67 4.43 34 46 0

1095 rows × 11 columns

df.head(10)
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
0 2020-01-01 7200.17 0.00 NaN 96.51 NaN NaN 2.19 3 10 26
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
3 2020-01-04 7410.66 0.00 NaN NaN NaN NaN NaN 5 58 0
4 2020-01-05 7411.32 0.00 NaN NaN NaN NaN NaN 5 36 0
5 2020-01-06 7769.22 3246.28 1573.10 96.62 62.83 13.85 2.15 7 46 14
6 2020-01-07 8163.69 3237.18 1567.85 96.96 62.69 13.79 2.16 7 35 17
7 2020-01-08 8079.86 3253.05 1571.95 97.34 59.98 13.45 2.15 10 53 57
8 2020-01-09 7879.07 3274.70 1550.75 97.42 59.59 12.54 2.17 6 54 16
9 2020-01-10 8166.55 3265.35 1553.60 97.38 59.12 12.56 2.21 4 60 10
df.fillna(axis=0,method='bfill').head(10) # 用这一列前面的一个数填充,后面的第一个不为0的数来填补。
time X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
0 2020-01-01 7200.17 0.00 1527.10 96.51 61.18 12.47 2.19 3 10 26
1 2020-01-02 6985.47 3257.85 1527.10 96.81 61.18 12.47 2.13 4 49 72
2 2020-01-03 7344.88 3234.85 1548.75 96.91 63.04 14.02 2.11 8 47 65
3 2020-01-04 7410.66 0.00 1573.10 96.62 62.83 13.85 2.15 5 58 0
4 2020-01-05 7411.32 0.00 1573.10 96.62 62.83 13.85 2.15 5 36 0
5 2020-01-06 7769.22 3246.28 1573.10 96.62 62.83 13.85 2.15 7 46 14
6 2020-01-07 8163.69 3237.18 1567.85 96.96 62.69 13.79 2.16 7 35 17
7 2020-01-08 8079.86 3253.05 1571.95 97.34 59.98 13.45 2.15 10 53 57
8 2020-01-09 7879.07 3274.70 1550.75 97.42 59.59 12.54 2.17 6 54 16
9 2020-01-10 8166.55 3265.35 1553.60 97.38 59.12 12.56 2.21 4 60 10

Python科研数据分析专题之缺失值填补相关推荐

  1. Python科研数据分析专题之正态性检验

    数据的正态性检验 Sim_Jackson | 2023 在时间序列预测类的论文中应用较多 # 导入需要的第三方库 import pandas as pd import os import warnin ...

  2. 全国Python科研应用专题实操培训班

    Python是一门简单的.解释型的.交互式的.可移植的.面向对象的编程语言.由于其语法简洁清晰,支持命令式编程.函数式编程,完全支持面向对象程序设计,近来在大数据分析与处理.深度学习.科学计算可视化及 ...

  3. 全国Python科研应用专题实操培训班通知

    Python是一门简单的.解释型的.交互式的.可移植的.面向对象的编程语言.由于其语法简洁清晰,支持命令式编程.函数式编程,完全支持面向对象程序设计,近来在大数据分析与处理.深度学习.科学计算可视化及 ...

  4. Python地信专题 |基于geopandas的空间数据分析-深入浅出分层设色

    点击蓝字关注我,有干货领取! 本文对应代码和数据已上传至我的Github仓库: https://github.com/CNFeffery/DataScienceStudyNotes[1] 已发布: P ...

  5. Python地信专题 | 基于geopandas的空间数据分析-文件IO篇

    本文对应代码和数据已上传至Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的坐标 ...

  6. python数据分析(三)——pandas缺失值处理

    系列文章目录: python数据分析(一)--series和读取外部数据 python数据分析(二)--DataFrame 缺失值处理 一.数据缺失 一.数据缺失 数据缺失通常有两种情况: 一种就是空 ...

  7. 【阿尼亚喜欢BigData】“红亚杯”数据分析进阶—使用Python操作Hive专题赛——满分解析③

    大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!! 本次为师傅们带来的是"红亚杯"数据分析进阶-使用Python操作Hive专题赛--满分解析系列 ...

  8. 【阿尼亚喜欢BigData】“红亚杯”数据分析进阶—使用Python操作Hive专题赛——满分解析②

    大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!! 本次为师傅们带来的是"红亚杯"数据分析进阶-使用Python操作Hive专题赛--满分解析系列 ...

  9. Python地信专题 | 基于geopandas的空间数据分析-坐标参考系篇

    文章来源于Python大数据分析,作者费弗里 本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在 ...

最新文章

  1. javaMail发邮件
  2. CentOS中无法使用setup命令 -bash:setup: command not found
  3. android高德天气api接口,天气查询-API文档-开发指南-Web服务 API | 高德地图API
  4. Hyper-v下安装网络流量监测图形分析工具 Cacti
  5. carray 、clist、cmap
  6. 大数据要学javaweb吗_学习大数据需要学习javaee的内容吗?
  7. 基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
  8. Linux的顶级十六进制编辑器
  9. 西南科技大学OJ题 顺序栈基本操作的实现1044
  10. HDU2157 How many ways??(可达矩阵+矩阵快速幂)
  11. 通过 web 录制视频(摄像头)并上传
  12. ai的预览模式切换_ai预览模式怎么退出
  13. win10键盘鼠标怎么使用?(键盘操纵鼠标)
  14. 复杂电路简化经典例题_复杂电路简化练习题
  15. 何时是PNE(纯策略纳什均衡)?何时是MNE(混合策略纳什均衡)?
  16. mysql slave-skip-errors_mysql之slave_skip_errors选项
  17. matlab RGB到HSI的彩色转换及实现
  18. 微信小程序 API的 promise化
  19. 将网页添加至收藏夹代码
  20. 记录自己第一次科研经历

热门文章

  1. 最近火爆了的对话ChatGPT
  2. 老-虎-机等转动图片思路
  3. 高仿贝壳找房之使用陀螺仪移动图片Drawable
  4. UPC-购买巧克力(贪心)
  5. 三网手机实名制认证API,实名认证接口文档
  6. CTF--RsaCtfTool安装
  7. Swan Song Beta冲刺阶段博客目录
  8. 【GNSS技术发展三部曲】
  9. 一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
  10. 在两个高程点之间如何生成加密点_地形图加密高程点的两种方法—CAD和ArcGIS