Python 更新dataframe会用nan填充列

Python 更新dataframe会用nan填充列,python,pandas,dataframe,Python,Pandas,Dataframe,在我的DataFrame中,我首先用nan替换大于某个值的值,然后创建另一个具有相同列名的DataFrame,并用随机数填充它。然后,我用新创建的数据帧更新原始的DataFrame,但在我第一次设置列nan值的行中,所有其他列都变成nan。该列中包含nan的原始行没有相同的问题。以下是我在pandas语法中的意思: df[df['column_name'] > 40] = np.nan column_series = df['column_name'] null_indices = col

在我的
DataFrame
中,我首先用
nan
替换大于某个值的值,然后创建另一个具有相同列名的
DataFrame
,并用随机数填充它。然后,我用新创建的数据帧更新原始的
DataFrame
,但在我第一次设置列
nan
值的行中,所有其他列都变成
nan
。该列中包含
nan
的原始行没有相同的问题。以下是我在
pandas
语法中的意思:

df[df['column_name'] > 40] = np.nan
column_series = df['column_name']
null_indices = column_series[column_series.isnull()].index
random_df = pd.DataFrame(np.random.normal(mu, sigma, size=len(null_indices)), index=null_indices, columns=['column_name'])
df.update(random_df)
以下是一些更好地解释这种情况的数字:

将值
>40
替换为
nan
之前,列中
nan
的数量:
6685022

列值为的行数
>40:329066


替换后,每列中除列名称之外的
nan
行数:
329066
使用建议的方法:

df.loc[df['coulmn_name'] > 40, 'column_name'] = np.nan

df[df['column\u name']>40]=np.nan
如果
column\u name
中的值大于40,则将用空值填充整个
df

Nihal是对的,但我更喜欢这种形式(我更喜欢):

df.column\u name.loc[df.column\u name>40]=np.nan

PS:使用Jupyter笔记本查看数据帧在每个步骤中的外观是一个好主意。

这是否可行

df.ix[df['column_name'] > 40,'column_name'] = np.nan # or indexof columns
column_series = df['column_name']
null_indices = column_series[column_series.isnull()].index
random_df = pd.DataFrame(np.random.normal(mu, sigma, size=len(null_indices)), 
index=null_indices, columns=['column_name'])
df.update(random_df)

问题就出现在你的第一句话中

df[df['column_name'] > 40] = np.nan
这意味着“将所选行中的所有值替换为
nan
”。所以命令

df.update(random_df)

继承它。

请提供一个。我想我刚刚做了?你可以很容易地创建一个数据框并应用代码来重现问题。如果你发布示例数据和准确的预期输出,你会发现你会更快地得到更好的答案。这样,答案更容易验证正确性。不推荐。链接索引在文档中被明确禁止。我真愚蠢,忘记了指定列,但现在我没有用更干净的方法。谢谢。
df.column\u name[df.column\u name>40]
。不推荐。这是链接索引,在文档中明确禁止。改用
.loc