如果列名以某些字符串结尾(Python 3.6),则删除数据框列

SPy*_*SPy 4 python python-3.x pandas

我有以下几列的数据框:

SectorName', 'Sector', 'ItemName', 'Item', 'Counterpart SectorName', 'Counterpart Sector', 'Stocks and TransactionsName', 'Stocks and Transactions', 'Units', 'Scale', 'Frequency', 'Date', 'Value'
Run Code Online (Sandbox Code Playgroud)

如何从df列名以Name。结尾的列中删除列。

jez*_*ael 6

您可以通过反相(〜)布尔掩码的列过滤不是需要与删除locstr.endswith,也正在str.contains$字符串匹配结束:

cols = ['SectorName', 'Name Sector', 'ItemName', 'Item', 'Counterpart SectorName']
df = pd.DataFrame([range(5)], columns = cols)
print (df)
   SectorName  Name Sector  ItemName  Item  Counterpart SectorName
0           0            1         2     3                       4

print (~df.columns.str.endswith('Name'))
[False  True False  True False]

df1 = df.loc[:, ~df.columns.str.endswith('Name')]
Run Code Online (Sandbox Code Playgroud)
df1 = df.loc[:, ~df.columns.str.contains('Name$')]
Run Code Online (Sandbox Code Playgroud)

或先过滤列名称:

print (df.columns[~df.columns.str.endswith('Name')])
Index(['Sector', 'Item'], dtype='object')

df1 = df[df.columns[~df.columns.str.endswith('Name')]]
Run Code Online (Sandbox Code Playgroud)
print (df1)
   Name Sector  Item
0            1     3
Run Code Online (Sandbox Code Playgroud)