所以我有一个Python 2.7 Pandas数据框,有很多列,如:
['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']
我在网上找不到任何相关的解决方案,所以任何帮助都会非常感激!
谢谢, 将
答案 0 :(得分:1)
使用矢量化str.contains
:
In [222]:
df = pd.DataFrame(columns=['SiteName', 'SSP', 'IONumber', 'userkey', 'Imps', 'PlatformClientCost', 'rawplatformcost', 'rawbidprice', 'PlatformClientBid', 'RawBidCPM', 'ClientBidCPM', 'CostCPM', 'ClientCostCPM', 'BidRatio'])
df.columns
Out[222]:
Index(['SiteName', 'SSP', 'IONumber', 'userkey', 'Imps', 'PlatformClientCost',
'rawplatformcost', 'rawbidprice', 'PlatformClientBid', 'RawBidCPM',
'ClientBidCPM', 'CostCPM', 'ClientCostCPM', 'BidRatio'],
dtype='object')
In [223]:
df.columns[~df.columns.str.contains(r'platform|client', case=False)]
Out[223]:
Index(['SiteName', 'SSP', 'IONumber', 'userkey', 'Imps', 'rawbidprice',
'RawBidCPM', 'CostCPM', 'BidRatio'],
dtype='object')
这里我们可以传递一个正则表达式模式和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)
然后我们应用否定运算符~
来反转布尔掩码并掩盖列数组。
答案 1 :(得分:1)
这是一个不错的尝试,但是你的逻辑在某个地方混淆了:
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方法的答案可能更有效。