我试图在数据帧中的4个特定列(字符串/对象类型)上用“”填充NAs。我可以将这些列作为I fillna()分配给一个新变量,但当I 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
作为value
参数来fillna()
正如@rhkarls在评论@Jeff的答案时提到的,使用索引到列列表的
.loc
将不支持inplace
操作,我也觉得这很令人沮丧。这是一个解决办法。示例:
假设我们想
fillna
仅用于x
和y
,不用于a
和b
。我希望使用
.loc
来工作(如在任务中),但它不是,如前所述:然而,documentation表示,
fillna()
的value
参数可以是:事实证明,使用一个dict of values将起作用:
此外,如果您的子集中有很多列,则可以使用dict理解,如:
你正在填写一份副本(然后你看不到)
或者:
fillna
就地(就地做某事不会提高性能)例如
或者最好
a_n6[[list_of_fileds]]
是多数据类型对象中的副本),请参见这里:http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy这里有一个更深入的解释 Pandas: Chained assignments
解决方法是将fillna结果保存到另一个变量中,然后按如下方式重新分配:
我的确切例子(我不能去工作,否则)是一个案例,我想在每个小组的第一行填写。像这样:
我的情况可能不必要地复杂,但我认为一般的“保存结果,然后重新分配”方法应该作为解决inplace=True失败的方法
相关问题 更多 >
编程相关推荐