Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫如何在所有浮点列都为NaN时删除行_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫如何在所有浮点列都为NaN时删除行

Python 熊猫如何在所有浮点列都为NaN时删除行,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下几点 AAA BBB CCC DDD ID1 ID2 ID3 ID4 0文本10 NaN 12 NaN 1 txt 10 NaN 12 13 2 txt txt txt NaN NaN NaN NaN 使用以下数据类型 AAA对象 BBB对象 CCC对象 DDD对象 ID1浮动64 ID2浮动64 ID3浮动64 ID4浮动64 是否只有在所有浮点列都为NaN时才有方法删除行 输出: AAA BBB CCC DDD ID1 ID2 ID3 ID4 0文本10 NaN 12 NaN 1

我有以下几点

AAA BBB CCC DDD ID1 ID2 ID3 ID4
0文本10 NaN 12 NaN
1 txt 10 NaN 12 13
2 txt txt txt NaN NaN NaN NaN
使用以下数据类型

AAA对象
BBB对象
CCC对象
DDD对象
ID1浮动64
ID2浮动64
ID3浮动64
ID4浮动64
是否只有在所有浮点列都为NaN时才有方法删除行

输出:

AAA BBB CCC DDD ID1 ID2 ID3 ID4
0文本10 NaN 12 NaN
1 txt 10 NaN 12 13
我不能使用df.dropna(子集=['ID1'、'ID2'、'ID3'、'ID4']),因为我的真实df有几个动态浮动列

感谢使用get all float columns(获取所有浮点列),然后测试是否有非缺失值,并选择by(按)每行至少有一个非missing值-因此missing float行将被删除:

df1 = df[df.select_dtypes(float).notna().any(axis=1)]
print (df1)
   AAA  BBB  CCC  DDD   ID1  ID2   ID3   ID4
0  txt  txt  txt  txt  10.0  NaN  12.0   NaN
1  txt  txt  txt  txt  10.0  NaN  12.0  13.0
对于pass float列和参数
how='all'
应更改您的解决方案,以测试每行的all
NaN
s:

df1 = df.dropna(subset=df.select_dtypes(float).columns, how='all')
#for return same dataframe 
#df.dropna(subset=df.select_dtypes(float).columns, how='all', inplace=True)
如果可能,多种类型的浮动通过
np进行检查。浮动

df1 = df.dropna(subset=df.select_dtypes(np.floating).columns, how='all')
使用


我建议使用
include=np.number
,因为它包含所有
float
dtype,这些类型可能都包含
NaN
。使用
include=float
时,您只需获得标准的
npfloat64
dtype

举例说明:

df['ID5'] = np.array([1,2,np.nan], dtype=np.float16)


>>> df.select_dtypes(include=float).columns.tolist()
['ID1', 'ID2', 'ID3', 'ID4']

>>> df.select_dtypes(include=np.number).columns.tolist()
['ID1', 'ID2', 'ID3', 'ID4', 'ID5']

您可以将
NaN
替换为
0
,然后删除仅包含
NaN

df.loc[:,~df.replace(0,np.nan).isna().all()]


使用
isna
。您无法使用当前df执行此操作,因为您没有使用
inplace=True
这是一个有缺陷的答案,因为它假设只有64个数据类型。检查我的编辑;p@rafaelc-hmmm,如果使用
df['ID5']=np.array([1,2,np.nan])
我的代码工作正常,但如果可能,多个
float
类型需要
print(df.select\u dtypes(include=np.floating).columns.tolist())
df['ID5'] = np.array([1,2,np.nan], dtype=np.float16)


>>> df.select_dtypes(include=float).columns.tolist()
['ID1', 'ID2', 'ID3', 'ID4']

>>> df.select_dtypes(include=np.number).columns.tolist()
['ID1', 'ID2', 'ID3', 'ID4', 'ID5']