[英]Python drop rows containing ending characters from any column
除了指定每一列,即df.drop(df[Col1]
...,可以根据条件删除行之外,还有其他方法吗?
例如,我可以遍历 Col1、Col2、...直到 Col15 并删除所有以字母“A”结尾的行吗?
我能够使用删除列
df.loc[:,~ df.columns.str.startswith('A')]
IIUC,您有一个 pandas DataFrame,并且想要删除包含至少一个以字母“A”结尾的字符串的所有行。 实现此目的的一种快速方法是通过numpy
创建掩码:
import pandas as pd
import numpy as np
假设我们的df
看起来像这样:
0 1 2 3 4 5
0 ADFC FDGA HECH AFAB BHDH 0
1 AHBD BABG CBCA AHDF BCAG 1
2 HEFH GEHH CBEF DGEC DGFE 2
3 HEDE BBHE CCCB DDGB DCAG 3
4 BGEC HACB ACHH GEBC GEEG 4
5 HFCC CHCD FCBC DEDF AECB 5
6 DEFE AHCH CHFB BBAA BAGC 6
7 HFEC DACC FEDA CBAG GEDD 7
目标:我们要删除索引为 0、1、6、7 的行。
尝试:
mask = np.char.endswith(df.to_numpy(dtype=str),'A') # create ndarray with booleans
indices_true = df[mask].index.unique() # Int64Index([0, 1, 6, 7], dtype='int64')
df.drop(indices_true, inplace=True) # drop indices_true
print(df)
out:
0 1 2 3 4 5
2 HEFH GEHH CBEF DGEC DGFE 2
3 HEDE BBHE CCCB DDGB DCAG 3
4 BGEC HACB ACHH GEBC GEEG 4
5 HFCC CHCD FCBC DEDF AECB 5
有点不清楚您的要求,但也许这适合。 在以“A”结尾的列中生成一些单词。 如果指定列中的任何字符串以“A”结尾,则删除该行。
nb_cols = 9
nb_vals = 6
def wgen():
return ''.join(random.choices(string.ascii_lowercase, k=5)) + random.choice('ABCDEFGH')
df = pd.DataFrame({'Col'+str(c): [wgen() for c in range(1,nb_vals)] for c in range(1,nb_cols+1)})
print(df)
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9
0 aawivA qorjeA qfjuoD nkwgzF auablC aehnqE cwuvzF diqwaF qlnpzG
1 aidjuH ljalaB ldhgsC zaangH mdtgkF lypfnB kynrxG qlnygH zzqyrC
2 pzqibD jdumcF ddufmG xstdcH vqpbkG rjnqxD ugscrA kmvyaE cykutE
3 gqpycH ynaeeA onirjE mnbtyH swjuzF dyvmvC tpxgsH ssnhbD spsojD
4 isptdF qzpitH akzwgE klgqpH pqpcqH psryiD tjaurC daaieC piduzE
假设我们在 Col4-Col7 中寻找“结尾 A”。 然后需要删除索引为 2 的行:
df[~df[['Col'+str(c) for c in range(4,7+1)]]
.apply(lambda x: x.str.match('.*A$').any(), axis=1)]
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9
0 aawivA qorjeA qfjuoD nkwgzF auablC aehnqE cwuvzF diqwaF qlnpzG
1 aidjuH ljalaB ldhgsC zaangH mdtgkF lypfnB kynrxG qlnygH zzqyrC
3 gqpycH ynaeeA onirjE mnbtyH swjuzF dyvmvC tpxgsH ssnhbD spsojD
4 isptdF qzpitH akzwgE klgqpH pqpcqH psryiD tjaurC daaieC piduzE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.