在Pandas身上减少NaN行的更好方法

egdjgwm8  于 2022-09-21  发布在  其他
关注(0)|答案(6)|浏览(124)

我自己找到了一种从Pandas Dataframe 中删除NaN行的方法。假设 Dataframe dat的列x包含NAN值,有没有更好的方法来删除dat中在x列中具有NaN值的每一行?

dat = dat[np.logical_not(np.isnan(dat.x))]
dat = dat.reset_index(drop=True)
vi4fp9gy

vi4fp9gy1#

使用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.
cgh8pdjw

cgh8pdjw2#

要扩展Hitesh的答案(如果您想删除‘x’特别是NaN的行),可以使用subset参数。他的回答将删除其他列也有nan的行

dat.dropna(subset=['x'])
dojqjjoe

dojqjjoe3#

以防前面答案中的命令不起作用,试试这个:dat.dropna(subset=['x'], inplace = True)

juzqafwq

juzqafwq4#

bool_series=pd.notnull(dat["x"])
dat=dat[bool_series]
suzh9iv8

suzh9iv85#

要根据特定列的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
3hvapo4f

3hvapo4f6#

Dropna()可能就是您所需要的全部,但是创建自定义过滤器也可能会有所帮助,或者更容易理解

import pandas as pd
import numpy as np

df = pd.DataFrame(
[[4, 7, np.nan, np.nan],
[5, np.nan, 11, 2],
[6, 9, 12, np.nan]], 
index=[1, 2, 3], 
columns=['a', 'b', 'c', 'd'])
print(f'starting matrix:n{df}')

# create the matrix of true/false NaNs:

null_matrix = df.isnull()

# create the sum of number of NaNs

sum_null_matrix = null_matrix.T.sum().T

# create the query of the matrix

query_null = sum_null_matrix<2

# apply them to your matrix

applied_df = df[query_null]
print(f'query matrix:n{query_null}')
print(f'applied matrix:n{applied_df}')

然后你会得到结果:

starting matrix:
   a    b     c    d
1  4  7.0   NaN  NaN
2  5  NaN  11.0  2.0
3  6  9.0  12.0  NaN
query matrix:
1    False
2     True
3     True
dtype: bool
applied matrix:
   a    b     c    d
2  5  NaN  11.0  2.0
3  6  9.0  12.0  NaN

有关NaN检查答案:How to check if any value is NaN in a Pandas DataFrame,可能提供更多信息

编辑:dropna()有一个阈值变量,但没有min变量。这个答案适用于当有人需要创建一个‘min nans’或其他一些定制函数时。

相关问题