我正在尝试在数据框中作为字符串/对象类型的4个特定列上填充"".我可以将这些列分配给一个新的变量作为我的fillna(),但是当我在fillna()inplace中时,底层数据不会改变.
a_n6 = a_n6[["PROV LAST", "PROV FIRST", "PROV MID", "SPEC NM"]].fillna("")
a_n6
Run Code Online (Sandbox Code Playgroud)
给我:
<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)
Run Code Online (Sandbox Code Playgroud)
但
a_n6[["PROV LAST", "PROV FIRST", "PROV MID", "SPEC NM"]].fillna("", inplace=True)
a_n6
Run Code Online (Sandbox Code Playgroud)
给我:
<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)
Run Code Online (Sandbox Code Playgroud)
这只是一排,但仍然令人沮丧.我究竟做错了什么?
C8H*_*4O2 20
dict作为value参数fillna()正如@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
Run Code Online (Sandbox Code Playgroud)
比方说,我们希望fillna为x和y只,不 a和b.
我希望使用.loc(如在作业中),但它没有,如前所述:
# doesn't work
df.loc[:,['x','y']].fillna(0, inplace=True)
print(df) # nothing changed
Run Code Online (Sandbox Code Playgroud)
但是,文档说明的value论点fillna()可以是:
另外还有一个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
Run Code Online (Sandbox Code Playgroud)
此外,如果您的子集中有很多列,则可以使用dict理解,如:
df.fillna({x:0 for x in ['x','y']}, inplace=True) # also works
Run Code Online (Sandbox Code Playgroud)
你正在填写一份副本(你当时看不到)
之一:
fillna到位(在场内做某事不会带来任何性能提升)a_n6[[list_of_fileds]]是多重型对象中的副本),请参见此处:http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-抗一个拷贝这是一个更深入的解释 熊猫:链式任务
| 归档时间: |
|
| 查看次数: |
18629 次 |
| 最近记录: |