Python按多个字符串排列文件服务器列

Python按多个字符串排列文件服务器列,python,pandas,Python,Pandas,因此,我有一个Python 2.7熊猫数据框架,其中包含许多列,如: ['SiteName', 'SSP', 'PlatformClientCost', 'rawmachinecost', 'rawmachineprice', 'ClientBid' +... + 20 more] 我想排除所有包含“平台”或“客户端”一词的列,下面是我的尝试: col = [c for c in dataframe.columns if c.lower() not in ('platform','client

因此,我有一个Python 2.7熊猫数据框架,其中包含许多列,如:

['SiteName', 'SSP', 'PlatformClientCost', 'rawmachinecost', 'rawmachineprice', 'ClientBid' +... + 20 more]
我想排除所有包含“平台”或“客户端”一词的列,下面是我的尝试:

col = [c for c in dataframe.columns if c.lower() not in ('platform','client') ]
print col
['SiteName', 'SSP', 'IONumber', 'userkey', 'Imps', 'PlatformClientCost', 'rawplatformcost', 'rawbidprice', 'PlatformClientBid', 'RawBidCPM', 'ClientBidCPM', 'CostCPM', 'ClientCostCPM', 'BidRatio']
我无法在网上找到任何相关的解决方案,因此任何帮助都将不胜感激

谢谢, 是否将使用矢量化:

在这里,我们可以传递一个正则表达式模式和
case=False
,这样您就不需要
lower
,它将返回一个布尔掩码:

In [225]:
df.columns.str.contains(r'platform|client', case=False)

Out[225]:
array([False, False, False, False, False,  True,  True, False,  True,
       False,  True, False,  True, False], dtype=bool)

然后,我们应用求反运算符
~
反转布尔掩码并屏蔽列数组。

这是一个很好的尝试,但您的逻辑在某个地方混淆了:

col = [c for c in dataframe.columns if c.lower() not in ('platform','client') ]
print col
['SiteName', 'SSP', 'IONumber', 'userkey', 'Imps', 'PlatformClientCost', 'rawplatformcost', 'rawbidprice', 'PlatformClientBid', 'RawBidCPM', 'ClientBidCPM', 'CostCPM', 'ClientCostCPM', 'BidRatio']
仔细看看你的情况。您只排除名称完全匹配(不考虑大小写)“平台”和“客户端”的列

你想要的是:

col = [c for c in dataframe.columns if 'platform' not in c.lower() and 'client' not in c.lower()]
print col
['SiteName', 'SSP', 'IONumber', 'userkey', 'Imps', 'rawbidprice', 'RawBidCPM', 'CostCPM', 'BidRatio']

如果这对您很重要的话,EdChum使用pandas方法的答案可能更有效。

虽然您的解决方案需要的更改最少,但您是对的,EdChum的效率更高。不过我也要感谢你:))
col = [c for c in dataframe.columns if 'platform' not in c.lower() and 'client' not in c.lower()]
print col
['SiteName', 'SSP', 'IONumber', 'userkey', 'Imps', 'rawbidprice', 'RawBidCPM', 'CostCPM', 'BidRatio']