Pandas выберите из Dataframe с помощью startswith
Это работает (используя Pandas 12 dev)
table2=table[table['SUBDIVISION'] =='INVERNESS']
Тогда я понял, что мне нужно выбрать поле, используя "начинается с". Так как я не хватал кучу.
Так что в документе Pandas как можно ближе я попытался
criteria = table['SUBDIVISION'].map(lambda x: x.startswith('INVERNESS'))
table2 = table[criteria]
И получил AttributeError: объект "float" не имеет атрибута "startswith"
Итак, я попробовал альтернативный синтаксис с тем же результатом
table[[x.startswith('INVERNESS') for x in table['SUBDIVISION']]]
Ссылка http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing
Раздел 4: Сопоставление списков и метод карты серии также могут использоваться для создания более сложных критериев:
Что мне не хватает?
Ответы
Ответ 1
Вы можете использовать метод str.startswith
DataFrame для получения более последовательных результатов:
In [11]: s = pd.Series(['a', 'ab', 'c', 11, np.nan])
In [12]: s
Out[12]:
0 a
1 ab
2 c
3 11
4 NaN
dtype: object
In [13]: s.str.startswith('a', na=False)
Out[13]:
0 True
1 True
2 False
3 False
4 False
dtype: bool
и булевское индексирование будет работать нормально (я предпочитаю использовать loc
, но он работает одинаково без):
In [14]: s.loc[s.str.startswith('a', na=False)]
Out[14]:
0 a
1 ab
dtype: object
.
Похоже, что один из ваших элементов в столбце Series/является float, у которого нет метода startswith, следовательно, AttributeError, понимание списка должно вызывать ту же ошибку...
Ответ 2
Извлечь все строки, которые начинаются с требуемой строки
dataFrameOut = dataFrame[dataFrame['column name'].str.match('string')]
Извлечь все строки, содержащие искомую строку
dataFrameOut = dataFrame[dataFrame['column name'].str.contains('string')]
Ответ 3
Вы можете использовать apply
чтобы легко применить любую функцию сопоставления строк к вашему столбцу поэлементно.
table2=table[table['SUBDIVISION'].apply(lambda x: x.startswith('INVERNESS')]
это при условии, что ваш столбец "SUBDIVISION" имеет правильный тип (строка)