作为大气遥感的一员,研究的对象主要是排放栅格图像,因此本文主要针对栅格图像来对其NaN空值进行有选择的填补。

在处理数据时遇到一个问题:当一个栅格图像只有很小一部分存在有用值。可能10000多个栅格区域只有300个有有效值,此背景下给一个假设:如果300个有效值能够表征此区域的特征,那么就想用这300个有用值来随机填补其他其余10000多个的空值,得到我该如何用python进行实现呢。

查了很多,提及的内容均是使用单一值(1或者0或者符号)或者特定值(前值或后值)进行一个简单的填补,但是没有了数据范围的可靠性和随机填补的随机性,这些内容对于复杂一些的数据处理都是没有意义的,因此想在此分析自己的想法思路,能为地理测绘或相关学科的人带来帮助也就再好不过了。

将栅格图像值转为dataframe的过程我就不作阐释了,仅仅是一系列的数据格式转换,我想到的办法是构建两个dataframe,data1与data2,假设data1和data2的栅格数据范围都是156(lon)*96(lat)=14976个栅格值变成dataframe也就是14976行,data1是其有效值(去除NAN),data2则是所有14976个值(包括NAN和有效值)。

#------------读取数据并展平为列表(分为两类:去除NAN值和没有去除NAN值)------------#
a1 = np.array(a1_3D_xr[m]).flatten() #读取每个月的系数并展平为列表
a1_1 = a1[np.logical_not(np.isnan(a1))].tolist() #删除NAN值,为构建data1做准备
a1_2 = a1.tolist() #未去除NAN值,为构建data2做准备#--将展平的列表制作为两个dataframe: data1(删除NAN值的A1部分),data2(有值和无值部分A=A1+A2--#
data1 = {'a1': a1_1}
df1 = pd.DataFrame(dict([(k, pd.Series(v)) for k, v in data1.items()]))
df1.index.name = 'Grid'data2 = {'a1': a1_2}
df2 = pd.DataFrame(dict([(k, pd.Series(v)) for k, v in data2.items()]))
df2.index.name = 'Grid'print(df1)
print(df2)

输出结果:df1和df2

得到了df1和df2,用df1来填补df2,可以看到在df1中有331个有效值,也就是说df2也有331行值是有效的,因此我在df1中随机选择14976个值(注意是14976,而不是14976-331=14645个值),一开始我天真的以为filna函数会对df2的NAN值自动进行填补,其实并不是,而是按照顺序,从0开始一直下去,有值的跳过,没值的填补,因此这边还是使用14976个值才会对df2所有空值起到填补作用,并且也不会影响df2的原有值。

#-------A有96*156=14976的栅格值,因此对A1进行14976次随机选择填补除A1以外的所有值----------#
df_i = df1.sample(n=14976,replace=True,axis=0) #在df1中随机选取14976个值
df_i = df_i.reset_index(drop=True)  #注意对选取的值要进行重新排列,方便按照索引一一对应填入df2
df_i.index.name = 'Grid'
df2['a1'] = df2['a1'].fillna(df_i['a1']) #填入df2
print(df2)

输出结果:填补完成的df2

最后对df2进行reshape和格式转换就可以得到栅格数据进行下一步数据分析等等实验步骤了。

Python-Dataframe使用已知数据填补空值相关推荐

  1. python打印自动换行如何解决_解决python DataFrame 打印结果不换行问题

    解决python DataFrame 打印结果不换行问题 如下所示: 加入代码: pd.set_option('display.width', 5000) 补充知识:Python 实现不换行打印字符的 ...

  2. python实现-用随机森林填补缺失值、均值填充0填充的比较

    sklearn中,可以使用sklearn.impute.SimpleImputer来轻松地填充均值等 import numpy as np import pandas as pd import mat ...

  3. 【统计DataFrame中每列非空值的个数】

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] 统计DataFrame中每列非空值的个数 选择题 关于以下代码说法错误的是?  import ...

  4. python数据框的横向贾总_[Spark][Python]DataFrame的左右连接例子

    [Spark][Python]DataFrame的左右连接例子 $ hdfs dfs -cat people.json {"name":"Alice",&quo ...

  5. python中如何计算集合的长度_Python如何计算序列长度 python dataframe中元素如何统计?...

    如何在python列表中查找某个元素的索引 方法二:利用enumerate函数.没有任何一个男人,可以游手好闲赢得女人的欣赏. python dataframe中元素如何统计? 比如我有一个数据集a, ...

  6. python dataframe合并相同行_pandas之DataFrame合并merge

    一.merge merge操作实现两个DataFrame之间的合并,类似于sql两个表之间的关联查询.merge的使用方法及参数解释如下: pd.merge(left, right, on=None, ...

  7. python Dataframe 根据某一列的值来删除多行

    python Dataframe 根据某一列的值来删除多行 在Dataframe中,有的时候想根据某一列值来删除. 方法一:你可以做负isin()索引: In [57]: df Out[57]:a b ...

  8. python DataFrame常用描述性统计分析方法

    python DataFrame常用描述性统计分析方法 文章目录 python DataFrame常用描述性统计分析方法 sum() 求和 mean() 求平均值 max() 最大值 & mi ...

  9. python dataframe 查看为空值_Python pandas.DataFrame 找出有空值的行

    0.摘要 pandas中DataFrame类型中,找出所有有空值的行,可以使用.isnull()方法和.any()方法. 1.找出含有空值的行 方法:DataFrame[DataFrame.isnul ...

最新文章

  1. 面试官:聊聊分布式事务,再说说解决方案!
  2. 和我一起学VSTA(Visual Studio Tools for Applications )(一)
  3. 【数据显示:比特币单日交易费用是BCH和BSV一年交易费用的4倍】
  4. 知识图谱在信息检索中的应用_如何使用知识图谱增强信息检索模型?
  5. [原创]一种自动地将继承自NSObject的自定义类序列化成JSON的方法
  6. 如何用两种方式同时实现ListBox的滚动功能
  7. H264解码的学习笔记
  8. java 队列和rabbitmq_java – 如何在不使消息出列的情况下浏览rabbitmq中的队列
  9. 为多种屏幕尺寸编写移动Flash内容
  10. c语言求偶数的积,《动物的多*语言》阅读理解及*
  11. CSDN博客下载器v2.0发布(导出PDF)
  12. 帮谷歌推广Webp图片格式之:Webp的格式转换
  13. 如何解决运行Spark-shell,出现报错Unable to load native-hadoop library for your platform的问题
  14. 创富学第一学习各家之长,史玉柱发展史.-宁可错过100次机会,不瞎投一个项目。...
  15. WebDAV是什么,有哪些支持webdav的网盘和工具?
  16. 五千年中国富豪排行榜(组图)
  17. 破解JS加密:url unicode加密而已
  18. Multi-Scale Attention Network for Crowd Counting:用于人群计数的多尺度注意网络
  19. 小程序拼团,分销逻辑
  20. lighttpd+fastcgi嵌入式web交叉编译到arm

热门文章

  1. Windows怎么把系统用户中文文件夹改成英文
  2. 浅谈Thread.setDaemon
  3. [生存志] 第87节 张仪犀首纵横大战
  4. Ubuntu18.04安装搜狗拼音输入法皮肤透明解决方法
  5. 【矩阵论】5. 线性空间与线性变换——生成子空间
  6. 软考数据库详细知识点整理(全)
  7. 36.Nginx 基础入门篇
  8. Django使用旧有的数据库
  9. mysql 表锁和行锁
  10. char、varchar、varchar2区别