Мне нужно фильтровать столбцы последним символом, проверяя несколько символов.
import numpy as np
import pandas as pd
df = pd.read_table("F:\\bridges.txt", names = ['IDENTIF','RIVER', 'LOCATION', 'ERECTED', 'PURPOSE', 'LENGTH', 'LANES',
'CLEAR-G', 'T-OR-D', 'MATERIAL', 'SPAN', 'REL-L', 'TYPE'])
print(df.columns[df.columns.str.endswith('N' or 'H' or 's') ])
Выход:
Index(['LOCATION', 'SPAN'], dtype='object')
Здесь я не получаю все столбцы, заканчивающиеся на N
, H
или s
.
Вы можете использовать pd.Index.str.endswith
с tuple
, а затем Boolean indexing:
L = ['IDENTIF','RIVER', 'LOCATION', 'ERECTED', 'PURPOSE', 'LENGTH',
'LANES', 'CLEAR-G', 'T-OR-D', 'MATERIAL', 'SPAN', 'REL-L', 'TYPE']
df = pd.DataFrame(columns=L)
cols = df.columns[df.columns.str.endswith(tuple('HNS'))]
Index(['LOCATION', 'LENGTH', 'LANES', 'SPAN'], dtype='object')
Функциональность имитирует Python встроенный str.endswith
, который позволяет вам поставлять tuple
в соответствии с несколькими элементами в качестве альтернативных условий.
[col for col in df.columns if col[-1] in ['N', 'H', 'S']]
Если я правильно помню, атрибут columns
в dataframe не является серией, поэтому вы не можете рассматривать ее как таковую. Это список.
Чтобы уточнить, столбцы не являются техническими списками. Они являются некоторыми вариациями особого типа индекса панд. Но для 99% всех намерений и целей они могут рассматриваться как списки. То, что я пытаюсь понять, это то, что они not
являются Серией и, следовательно, не имеют методов серии.