在 pandas 中删除 nan 行的更好方法
Posted
技术标签:
【中文标题】在 pandas 中删除 nan 行的更好方法【英文标题】:better way to drop nan rows in pandas 【发布时间】:2016-07-22 02:48:07 【问题描述】:我自己找到了一种从 pandas 数据框中删除 nan 行的方法。给定一个数据框dat
,其列x
包含nan 值,有没有更优雅的方法来删除dat
的每一行,它在x
列中有一个nan 值?
dat = dat[np.logical_not(np.isnan(dat.x))]
dat = dat.reset_index(drop=True)
【问题讨论】:
你的意思是pd.dropna()
?
看起来会起作用的
【参考方案1】:
使用dropna:
dat.dropna()
如果所有标签都是 nan 或任何标签都是 nan,您可以传递参数 how
来删除
dat.dropna(how='any') #to drop if any value in the row has a nan
dat.dropna(how='all') #to drop if all values in the row are nan
希望能回答您的问题!
编辑 1:
如果您只想从特定列中删除包含 nan
值的行,正如 J. Doe 在下面的回答中所建议的那样,您可以使用以下内容:
dat.dropna(subset=[col_list]) # col_list is a list of column names to consider for nan values.
【讨论】:
【参考方案2】:如果您想删除“x”具体为 nan 的行,要扩展 Hitesh 的答案,您可以使用子集参数。他的回答会删除其他列也有 nan 的行
dat.dropna(subset=['x'])
【讨论】:
【参考方案3】:以防万一先前答案中的命令不起作用,
尝试这个:
dat.dropna(subset=['x'], inplace = True)
【讨论】:
是的,pandas 默认是 inplace=False,需要记住【参考方案4】:bool_series=pd.notnull(dat["x"])
dat=dat[bool_series]
【讨论】:
代码总是好的,但它也有助于添加一些关于此代码如何回答原始问题的 cmets/context。 请编辑您的答案以添加对您的代码如何工作以及它如何解决 OP 问题的解释。许多 *** 用户是新手,不会理解您发布的代码,因此不会从您的回答中学习。【参考方案5】:根据特定列的 Nan 值删除行:
d= pd.DataFrame([[2,3],[4,None]]) #creating data frame
d
Output:
0 1
0 2 3.0
1 4 NaN
d = d[np.isfinite(d[1])] #Select rows where value of 1st column is not nan
d
Output:
0 1
0 2 3.0
【讨论】:
以上是关于在 pandas 中删除 nan 行的更好方法的主要内容,如果未能解决你的问题,请参考以下文章
pandas删除nan数据,筛选出nan的数据,筛选出非nan的数据,替换nan值
在 scipy/pandas 中用 Pearson 的 r 删除 'nan'
使用 NaN 在 pandas 中按列对数据进行 Winsorizing
如何从 dtype 为列表的 Pandas 系列中删除 NaN?
从 pandas 转换为 numpy 后,如果数组包含 nan,则删除“nan”或减少 numpy 数组的长度 [重复]