Python Pandas文件管理器列由多个字符串组成

时间:2016-01-20 15:47:52

标签: python pandas

所以我有一个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']

我在网上找不到任何相关的解决方案,所以任何帮助都会非常感激!

谢谢, 将

2 个答案:

答案 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方法的答案可能更有效。