我正在尝试在数据框的字符串/对象类型为4的特定列上用“”填充NA。我可以在fillna()时将这些列分配给新变量,但是当我填充fillna()时,基础数据不会改变。

a_n6 = a_n6[["PROV LAST", "PROV FIRST", "PROV MID", "SPEC NM"]].fillna("")
a_n6


给我:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1542 entries, 0 to 3611
Data columns (total 4 columns):
PROV LAST     1542  non-null values
PROV FIRST    1542  non-null values
PROV MID      1542  non-null values
SPEC NM       1542  non-null values
dtypes: object(4)




a_n6[["PROV LAST", "PROV FIRST", "PROV MID", "SPEC NM"]].fillna("", inplace=True)
a_n6


给我:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1542 entries, 0 to 3611
Data columns (total 7 columns):
NPI           1103  non-null values
PIN           1542  non-null values
PROV FIRST    1541  non-null values
PROV LAST     1542  non-null values
PROV MID      1316  non-null values
SPEC NM       1541  non-null values
flag          439  non-null values
dtypes: float64(2), int64(1), object(4)


它只是一排,但仍然令人沮丧。我究竟做错了什么?

最佳答案

使用dict作为valuefillna()参数

正如@rhkarls在@Jeff的答案中的评论中所提到的,使用索引到列列表的.loc将不支持inplace操作,我也感到沮丧。这是一种解决方法。

例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2,3,4,np.nan],
                   'b':[6,7,8,np.nan,np.nan],
                   'x':[11,12,13,np.nan,np.nan],
                   'y':[16,np.nan,np.nan,19,np.nan]})
print(df)
#     a    b     x     y
#0  1.0  6.0  11.0  16.0
#1  2.0  7.0  12.0   NaN
#2  3.0  8.0  13.0   NaN
#3  4.0  NaN   NaN  19.0
#4  NaN  NaN   NaN   NaN


假设我们只希望fillna用于xy,而不是ab

我希望使用.loc可以正常工作(就像在分配中一样),但是不起作用,如前所述:

# doesn't work
df.loc[:,['x','y']].fillna(0, inplace=True)
print(df) # nothing changed


但是,documentation表示valuefillna()参数可以是:


  交替使用值的dict / Series / DataFrame,指定每个索引(对于Series)或列(对于DataFrame)使用哪个值。 (不在dict / Series / DataFrame中的值将不被填充)。


事实证明,使用值的字典将起作用:

# works
df.fillna({'x':0, 'y':0}, inplace=True)
print(df)
#     a    b     x     y
#0  1.0  6.0  11.0  16.0
#1  2.0  7.0  12.0   0.0
#2  3.0  8.0  13.0   0.0
#3  4.0  NaN   0.0  19.0
#4  NaN  NaN   0.0   0.0


另外,如果子集中有很多列,则可以使用dict理解,如:

df.fillna({x:0 for x in ['x','y']}, inplace=True) # also works

关于python - Pandas 不会到位fillna(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58644191/

10-09 20:20