python - 如何以简单的方式删除 pandas 数据框中的特殊行

标签 python pandas

我有一个 python 中的 pandas 数据框。我想在三种情况下删除该行。首先,该行中的第 1 至 6 列和第 10 至 15 列为“NA”。其次,第 1 至 3 列、第 7 至 12 列和第 16 至 18 列为“NA”。第三,第 4 至 9 栏和第 13 至 18 栏为“NA”。我编写了代码来修复它,但它不起作用。 代码如下:

data = pd.read_csv('data(2).txt',sep = "\t",index_col = 'tracking_id')
num = len(data) + 1
for i in range(num):
    if (data.iloc[i,[0:5,9:14]] == 'NA') | (data.iloc[i,[0:11,15:17]] == 'NA)'\
    | (data.iloc[i,[3:8,12:17]] == 'NA'):
        data = data.drop(data.index[i], axis = 0)
数据在链接中:enter link description here

最佳答案

您可以使用:

np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(5,18)))

df.iloc[0, np.r_[0:5,9:14]] = np.nan
df.iloc[2, np.r_[0:11,15:17]] = np.nan
df.iloc[3:5, np.r_[3:8,12:17]] = np.nan
print (df)
    0    1    2    3    4    5    6    7    8    9    10   11   12   13   14  \
0  NaN  NaN  NaN  NaN  NaN  0.0  4.0  2.0  5.0  NaN  NaN  NaN  NaN  NaN  8.0   
1  6.0  2.0  4.0  1.0  5.0  3.0  4.0  4.0  3.0  7.0  1.0  1.0  7.0  7.0  0.0   
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  2.0  5.0  1.0  8.0   
3  2.0  8.0  3.0  NaN  NaN  NaN  NaN  NaN  3.0  4.0  7.0  6.0  NaN  NaN  NaN   
4  7.0  6.0  6.0  NaN  NaN  NaN  NaN  NaN  6.0  6.0  0.0  7.0  NaN  NaN  NaN   

    15   16  17  
0  4.0  0.0   9  
1  2.0  9.0   9  
2  NaN  NaN   4  
3  NaN  NaN   5  
4  NaN  NaN   4  

首先检查 isnull 值是否为 NaN ,然后选择numpy.r_iloc并与 all 进行比较用于检查每行的所有 value 是否都为 True。然后使用 | (或)构建主掩码。

最后一次过滤:boolean indexing条件相反 ~:

mask = df.isnull()
m1 = mask.iloc[:, np.r_[0:5,9:14]].all(1)
m2 = mask.iloc[:, np.r_[0:11,15:17]].all(1)
m3 = mask.iloc[:, np.r_[3:8,12:17]].all(1)
m = m1 | m2 | m3
print (m)
0     True
1    False
2     True
3     True
4     True
dtype: bool

df = df[~m]
print (df)
    0    1    2    3    4    5    6    7    8    9    10   11   12   13   14  \
1  6.0  2.0  4.0  1.0  5.0  3.0  4.0  4.0  3.0  7.0  1.0  1.0  7.0  7.0  0.0   

    15   16  17  
1  2.0  9.0   9  

关于python - 如何以简单的方式删除 pandas 数据框中的特殊行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43610554/

相关文章:

python - Python 中 if/else 语句错误中不支持的操作数

python - 纪元纳秒到正常时间

python - 使用 Pandas 数据框写入复杂格式布局

python - 如何使用 Pandas 在年份变化时继续周数

python - 奇怪的 SciPy Gamma 概率分布函数

python - 从 pandas 的列表中提取唯一的项目

python - 在全局(项目范围)自定义 Django 类基 View

python - 根据索引列表更改 Pandas 列的值

python - Python 中的哈希集和哈希表

python - 如何在 Django 1.3 中获取 POST 数据