<p>我在使用<code>df = df.fillna(lambda x: x.median())</code>时遇到了同样的问题
我的解决方案是将真实值而不是“函数”放入数据帧:</p>
<pre><code># -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
</code></pre>
<p>我用nan创建数据帧10行,3列</p>
<pre><code>df = pd.DataFrame(np.random.randint(100,size=(10,3)))
df.iloc[3:5,0] = np.nan
df.iloc[4:6,1] = np.nan
df.iloc[5:8,2] = np.nan
</code></pre>
<p>属性愚蠢的列标签以便以后使用</p>
<pre><code>df.columns=['Number_of_Holy_Hand_Grenades_of_Antioch', 'Number_of_knight_fleeings', 'Number_of_rabbits_of_Caerbannog']
print df.isnull().any() # tell if nan per column
</code></pre>
<p>对于通过标签的每一列,我们用列本身计算出的中值填充所有nan值。可与mean()等一起使用</p>
<pre><code>for i in df.columns: #df.columns[w:] if you have w column of line description
df[i] = df[i].fillna(df[i].median() )
print df.isnull().any()
</code></pre>
<p>现在df包含用中值替换的nan</p>
<pre><code>print df
</code></pre>
<p>例如,你可以</p>
<pre><code>X = df.ix[:,:].values
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
</code></pre>
<p>不适用于<code>df = df.fillna(lambda x: x.median())</code>
我们现在可以使用df into forward方法,因为所有值都是真值,而不是函数;与使用lambda into dataframe.fillna()的方法相反,例如<a href="https://stackoverflow.com/questions/18689823/pandas-dataframe-replace-nan-values-with-average-of-columns">all proposals using fillna combined to lambda</a></p>