繁体   English   中英

Python从任何列中删除包含结束字符的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM