熊猫fillna不工作

时间:2014-08-05 20:26:08

标签: python pandas

我有一个带有nans的数据框:

>>>df.head()
Out[1]: 
            JPM US SMALLER COMPANIES C ACC
1990-01-02                             NaN
1990-01-03                             NaN
1990-01-04                             NaN
1990-01-05                             NaN
1990-01-08                             NaN

我有另一个包含值的数据框:

>>>t.head()
Out[1]: 
1990-01-02    51.95
1990-01-03    52.63
1990-01-04    53.04
1990-01-05    52.07
1990-01-08    51.73
Name: JPM US SMALLER COMPANIES C ACC, dtype: float64

不幸的是,df.fillna似乎不适合我:

>>>df.fillna( t ).head()
Out[1]: 
            JPM US SMALLER COMPANIES C ACC
1990-01-02                             NaN
1990-01-03                             NaN
1990-01-04                             NaN
1990-01-05                             NaN
1990-01-08                             NaN

[5 rows x 1 columns]

为什么会这样?我在熊猫0.13.1

5 个答案:

答案 0 :(得分:32)

您需要inplace

df[1].fillna(0, inplace=True)

答案 1 :(得分:1)

或者:

df = df.replace(np.nan, 0) #或您认为合适的任何其他值

df.replace(np.nan, 0) 或 df.fillna(0) 当我在 Na 操作之后立即应用某些 str.replace() 操作时让我失望.. 所以要注意你的命令顺序 - > 首先 str.replace() 比 fillna()

答案 2 :(得分:0)

您需要分配值df = df.fillna( t )

答案 3 :(得分:0)

您有两个选择:

1)特定于每列

df = df.fillna(0)

2)对于整个数据框

var jsonData = JSON.parse(responseBody);
var old = pm.environment.get("responseData");
old = JSON.parse(old);
// filter jsonData if needed


old.push(jsonData);
old = JSON.stringify(old);
pm.environment.set("responseData", old);

var page = parseInt(pm.environment.get("page"));
var pageSize = parseInt(pm.environment.get("take"));
var skip = parseInt(pm.environment.get("skip"));
skip = page * pageSize;
page = page + 1;
pm.environment.set("skip", skip);
pm.environment.set("page", page);

答案 4 :(得分:0)

检查为什么在迭代列时 fillna() 不起作用。 创建一个带有列的 DataFrame 并检查以下输出:

    for col in df.columns[df.isnull().any()]:
        df[col].fillna(df[col].mode(), inplace = True)
        #df[col].fillna(df[col].mode()[0], inplace = True)
        print(df[col].mode())
        #print(df[col].mode()[0])
        print(type(df[col].mode()))
        #print(type(df[col].mode()[0]))
    df.isnull().sum() / df.shape[0] * 100

较早的一个不会抛出错误,但没有填充 NA 值。注释行似乎有效。