gpt4 book ai didi

python - pandas fillna 不适用于数据集的子集

转载 作者:行者123 更新时间:2023-12-01 02:06:46 25 4
gpt4 key购买 nike

我想估算 df['box_office_revenue'] 的缺失值中位数由 df['release_date'] == x 指定和df['genre'] == y

下面是我的中值查找函数。

def find_median(df, year, genre, col_year, col_rev):
median = df[(df[col_year] == year) & (df[col_rev].notnull()) & (df[genre] > 0)][col_rev].median()
return median

中值函数有效。我检查了。因为收到一些 CopyValue 错误,所以我执行了下面的代码。

pd.options.mode.chained_assignment = None  # default='warn'

然后我会浏览年份和流派,col_name = ['is_drama', 'is_horror', etc]

i = df['release_year'].min()
while (i < df['release_year'].max()):
for genre in col_name:
median = find_median(df, i, genre, 'release_year', 'box_office_revenue')
df[(df['release_year'] == i) & (df[genre] > 0)]['box_office_revenue'].fillna(median, inplace=True)
print(i)
i += 1

然而,一切都没有改变!

len(df['box_office_revenue'].isnull())

输出为 35527。这意味着 df['box_office_revenue'] 中没有空值。已经被填满了。

我哪里出错了?

这里快速浏览一下数据:其他列只是二进制变量

enter image description here

最佳答案

你提到

I did the code below since I was getting some CopyValue error...

这个警告很重要。您没有提供您的数据,因此我无法实际检查,但问题可能是由于:

df[(df['release_year'] == i) & (df[genre] > 0)]['box_office_revenue'].fillna(..)

让我们来分解一下:

首先选择一些行:

df[(df['release_year'] == i) & (df[genre] > 0)]

然后从中选择一列:

...['box_office_revenue']

现在你遇到了一个问题......

为什么?

问题是,当您选择某些行(即:不是全部)时,pandas 被迫创建数据框的副本。然后,您选择副本的一列!。然后在副本上fillna()。不是很有用。

如何修复它?

首先选择列:

df['box_office_revenue'][(df['release_year'] == i) & (df[genre] > 0)].fillna(..)

通过首先选择整个列,pandas 不会被迫进行复制,因此后续操作应该按需要进行。

关于python - pandas fillna 不适用于数据集的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48980261/

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