从 Fill in missing row values in pandas dataframe
我有下面的数据帧,我想填补缺失的值。在
mukey hzdept_r hzdepb_r sandtotal_r silttotal_r
425897 0 61
425897 61 152 5.3 44.7
425911 0 30 30.1 54.9
425911 30 74 17.7 49.8
425911 74 84
我希望每个缺失的值都是对应于该mukey的值的平均值。在这种情况下,例如,第一行缺失值将是mukey==425897的sandtool_r和silttotal_r的平均值。熊猫菲尔娜似乎没有做到这一点。有什么帮助吗?在
虽然代码适用于该示例中的示例数据帧,但它在我上载到此处的较大数据集上失败:https://www.dropbox.com/s/w3m0jppnq74op4c/www004.csv?dl=0
^{pr2}$我得到了一个错误:InvalidIndexError。为什么不起作用?在
使用^{} 。它允许您根据相同的索引用右侧数据帧上的匹配数据修补左数据帧上丢失的数据。在
在这个例子中,
df1
在左边,df2
作为右边的一个。在请注意,下面的行在结果
^{pr2}$df3
中仍然没有值因为它们一开始是单行,因此,
.mean()
对它们来说没有任何意义(呃,看到我在那里做了什么吗?)。在问题是索引值重复。当您使用
df1.fillna(df2)
时,如果df1中有多个NaN
条目的索引和列标签都是相同的,pandas在尝试分割df1时会感到困惑,并抛出InvalidIndexError
。在您的示例数据帧工作正常,因为即使有重复的索引值,每个索引值中只有一个是空的。在某些情况下,较大的数据帧包含共享索引值和列标签的空项。在
要使其工作,您可以一次只做一列。由于某些原因,当操作一个序列时,pandas不会被同一索引的多个条目混淆,而只会在每个条目中填充相同的值。因此,这应该是有效的:
注意:如果您在填充的数据帧中有“额外”数据,请小心使用
combine_first
方法。combine_first
函数将包含从中填充的数据帧中的所有索引,即使它们不在原始数据帧中。在相关问题 更多 >
编程相关推荐