Python -Pandas- DROPNA(子集)删除值没有明显的原因?

laik7k3q  于 2022-12-02  发布在  Python
关注(0)|答案(2)|浏览(154)

我在清理一些数据,我一直在纠结一件事。
我有一个7740行和68列的 Dataframe 。
大多数列包含Nan值。
我感兴趣的是,当这两列中的值为NaN时,删除NaN值:[序列号标识]、[编号标识]
示例:
| 序列号|编号标识|
| - -|- -|
| 8 RY 68 U4 R型|不含N|
| 小行星8756|小行星875932|
| 不含N|不含N|
| 不含N|七八九六五二一|
| 7 EY 68 U4 R型|不含N|
| 小行星95856|九八八八八八八|
| 不含N|不含N|
| 不含N|小行星4555555|
结果
| 序列号|编号标识|
| - -|- -|
| 8 RY 68 U4 R型|不含N|
| 小行星8756|小行星875932|
| 不含N|七八九六五二一|
| 7 EY 68 U4 R型|不含N|
| 小行星95856|九八八八八八八|
| 不含N|小行星4555555|
当NaN在两列中时删除行。
我使用了以下方法:

df.dropna(subset=['SERIAL_ID', 'NUMBER_ID'], how='all', inplace=True)

当我在有68列的 Dataframe 上使用此方法时,得到的结果如下:
| 序列号|编号标识|
| - -|- -|
| 不含N|不含N|
| 不含N|不含N|
| 不含N|不含N|
| 不含N|七八九六五二一|
| 不含N|不含N|
| 小行星95856|不含N|
| 不含N|不含N|
| 不含N|小行星4555555|
我尝试了一个只有3列的 Dataframe 副本,它工作正常。
它以某种方式工作(我可以告诉,因为我在另一列中有一个相同的ID),但删除了一些值,我不知道为什么。
请帮帮忙我已经纠结了一整天了,再次感谢.

nhjlsmyf

nhjlsmyf1#

我不知道为什么它只适用于3列,而不是68原件。但是,我们可以获得 * 所需的输出 * 在其他方式。
使用boolean indexing

df[df[['SERIAL_ID', 'NUMBER_ID']].notnull().any(axis=1)]
u91tlkcl

u91tlkcl2#

您可以使用boolean逻辑或简单地对任何给定列执行类似以下操作:

import numpy as np
import pandas as pd

# sample dataframe
d = {'SERIAL_ID':['8RY68U4R', '8756ERT5', np.nan, np.nan],
    'NUMBER_ID':[np.nan, 8759321, np.nan ,7896521]}
df = pd.DataFrame(d)

# apply logic to columns
df['nans'] = df['NUMBER_ID'].isnull() * df['SERIAL_ID'].isnull()

# filter columns
df_filtered = df[df['nans']==False]
print(df_filtered)

返回以下内容:

SERIAL_ID  NUMBER_ID   nans
0  8RY68U4R        NaN  False
1  8756ERT5  8759321.0  False
3       NaN  7896521.0  False

相关问题