gpt4 book ai didi

python - 使用数据帧作为 .fillna() 的参数时,是否需要相同的形状?

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:10 24 4
gpt4 key购买 nike

根据文档,您可以使用 Dataframe 作为 .fillna() 的值参数

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.fillna.html

但是数据框是否需要形状相同?如果是这样,为什么第一个示例会给我所需的输出?

使用这个 df:

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

我可以跑:

df = pd.read_clipboard()
df1 = df.set_index('mukey')
df1.fillna(df.groupby('mukey').mean(),inplace=True)

和 df1 产生所需的 df:

        hzdept_r  hzdepb_r  sandtotal_r  silttotal_r
mukey
425897 0 61 5.3 44.70
425897 61 152 5.3 44.70
425911 0 30 30.1 54.90
425911 30 74 17.7 49.80
425911 74 84 23.9 52.35

但是,当我尝试在更大的 df 上运行相同的代码时,它因 InvalidIndexError 而中断。

df = pd.read_csv('www004.csv')
df1 = df.set_index('mukey')
df1.fillna(df.groupby('mukey').mean(),inplace=True)

错误:

InvalidIndexError                         Traceback (most recent call last)
<ipython-input-126-a1038ea351c9> in <module>()
----> 1 df1.fillna(df.groupby('mukey').mean(),inplace=True)

/Users/liamfoley/anaconda/lib/python2.7/site-packages/pandas/core/generic.pyc in fillna(self, value, method, axis, inplace, limit, downcast)
2410 downcast=downcast)
2411 elif isinstance(value, DataFrame) and self.ndim == 2:
-> 2412 new_data = self.where(self.notnull(), value)
2413 else:
2414 raise ValueError("invalid fill value with a %s" % type(value))

/Users/liamfoley/anaconda/lib/python2.7/site-packages/pandas/core/generic.pyc in where(self, cond, other, inplace, axis, level, try_cast, raise_on_error)
3306 not all([other._get_axis(i).equals(ax)
3307 for i, ax in enumerate(self.axes)])):
-> 3308 raise InvalidIndexError
3309
3310 # slice me out of the other

InvalidIndexError:

我可以通过创建一个具有相同形状的 means_df 来解决这个问题。

import pandas as pd
df = pd.read_csv('www004.csv').set_index('mukey')
means = df.groupby(level=0).mean()
means_df = pd.merge(pd.DataFrame(df.index),means,
left_on='mukey',right_index=True,how='left').set_index('mukey')
df1 = df.fillna(means_df)

这给了我想要的结果:

 df.ix[426184]
hzdept_r hzdepb_r sandtotal_r silttotal_r claytotal_r om_r
mukey
426184 0 18 30.1 54.9 15 3.5
426184 18 46 58.2 17.8 24 NaN
426184 46 152 NaN NaN 5 NaN

df1.ix[426184]
hzdept_r hzdepb_r sandtotal_r silttotal_r claytotal_r om_r
mukey
426184 0 18 30.10 54.90 15 3.5
426184 18 46 58.20 17.80 24 3.5
426184 46 152 44.15 36.35 5 3.5

相关: Pandas fill missing values in dataframe from another dataframe

Fill in missing row values in pandas dataframe

In Pandas, how can I patch a dataframe with missing values with values from another dataframe given a similar index?

最佳答案

解决方法是使用 transform (而不是聚合)groupby 方法:

df1.fillna(df1.groupby(level=0).transform("mean"))

我不清楚这是否是 pandas 中的错误,我建议在 Github 上发布问题(这可能是一个不错的功能)!

关于python - 使用数据帧作为 .fillna() 的参数时,是否需要相同的形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29378852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com