使用startswith/contains批量删除Pandas DataFrame超157列的参数错误如何解决
报错原因
pandas的Series.str.startswith()方法的第一个参数只支持传入单个前缀字符串或者包含所有待匹配前缀的元组,不支持直接传入多个零散的字符串参数,你现在一次性传了155个独立参数,自然触发参数数量不匹配的报错。
解决代码
你只需要把所有要匹配的前缀整理成一个元组,再传入startswith()即可,调整后的代码如下:
# 先把所有需要匹配删除的前缀整理成元组(注意是元组不是列表,startswith要求传入元组) drop_prefixes = ( 'KI_2204993', 'KI_9095014','KI_2204943','KI_2783003','KI_9094998','KI_2783004','KI_2783005','KI_2783006', 'KI_9094999','KI_9095098','KI_2783007','KI_2205006','KI_2205008','KI_2205016','KI_2205018','KI_2220101', 'KI_2220102','KI_2220103','KI_2783022','KI_2220110','KI_2220111','KI_2220113','KI_9095018','KI_9095020', 'KI_9095021','KI_9095022','KI_9095023','KI_2220114','KI_9095024','KI_2205042','KI_2205043','KI_2205044', 'KI_2205045','KI_2205046','KI_2205047','KI_2205048','KI_2205049','KI_2205050','KI_2205051','KI_2783027', 'KI_2205076','KI_2205077','KI_2205078','KI_2205080','KI_2205082','KI_2205083','KI_2205084','KI_2205085', 'KI_2205095','KI_2205096','KI_2205097','KI_2205098','KI_2205102','KI_2205104','KI_2205105','KI_2205106', 'KI_2205107','KI_2205108','KI_2205109','KI_2205111','KI_2205112','KI_2205114','KI_2205115','KI_2205116', 'KI_2205117','KI_2205118','KI_9095025','KI_2783042','KI_2205120','KI_1086818','KI_1086818','KI_1086818', 'KI_2205122','KI_2205123','KI_2205124','KI_2205125','KI_2205126','KI_1138362','KI_2205129','KI_9095099', 'KI_2205130','KI_2783048','KI_9095028','KI_1138362','KI_6478247','KI_2205136','KI_2205137','KI_2783150', 'KI_2205141','KI_2205144','KI_2205145','KI_2205146','KI_2205147','KI_2205148','KI_2205151','KI_2205152', 'KI_2205153','KI_2252310','KI_9095029','KI_9095030','KI_9095031','KI_1138362','KI_9095032','KI_2205158', 'KI_2205159','KI_9704603','KI_1001 (Please give a br','KI_NumberOfEmployees (How','KI_YearFounded (Which yea', 'KI_WomanOwned (Are you Wo','KI_2003 (Are you WBENC (W','KI_2004 (Are you NWBOC (N','KI_2005 (Are you State Go', 'KI_2006 (Are you Locality','KI_2007 (Are you self-cer','KI_3004 (Other Certificat','KI_MinorityOwned (Are you', 'KI_2009 (Are you NMSDC (N','KI_2010 (Are you Small Bu','KI_2011 (Are you State Go','KI_2012 (Are you Locality', 'KI_2013 (Are you self-cer','KI_3005 (Other Certificat','KI_2001 (Are you Small Bu','KI_2015 (Are you Small Bu', 'KI_2016 (Are you 8(a) Cer','KI_2017 (Are you HUBZone ','KI_2018 (Are you State Go','KI_2019 (Are you Locality', 'KI_2020 (Are you self-cer','KI_3006 (Other Certificat','KI_VeteranOwned (Are you ','KI_DisabledVeteranOwned (', 'KI_VietnamVeteranOwned (A','KI_2023 (Are you ISO 9001','KI_2024 (Are you TS 16949','KI_2025 (Are you ISO 1400', 'KI_2026 (Are you ISO 2600','KI_2027 (Are you ISO 3100','KI_2028 (Are you ISO 5000','KI_3008 (Are you ISO Comp', 'KI_3003 (Primary Capabili','KI_2030 (Green Initiative','KI_UNSPSCCategories (Comm','KI_VatID (VAT Id)', 'KI_UsTIN (Tax Id)','KI_StockSymbol (Stock Sym','KI_LegalName (Legal Name)','KI_OrganizationType (Type', 'KI_RegionalTIN (Regional ','KI_StateTIN (State Tax Id','KI_BackupWithholdingExemp','KI_StateOfIncorporation (', 'KI_GlobalLocationNumber (' ) # 直接把元组传入startswith即可 Proc_df = Proc_df.loc[:, ~Proc_df.columns.str.startswith(drop_prefixes)]
拓展场景
如果是需要匹配包含某几个关键词的列,用str.contains()的话可以用正则的或逻辑,把关键词用|拼接即可,示例:
# 要匹配包含这些关键词的列 drop_keywords = ['关键词1','关键词2','关键词3'] Proc_df = Proc_df.loc[:, ~Proc_df.columns.str.contains('|'.join(drop_keywords))]
内容的提问来源于stack exchange,提问作者Siyabonga_B
相关产品推荐
相关产品推荐

