Подтвердить что ты не робот

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: Сопоставление списков и метод карты серии также могут использоваться для создания более сложных критериев:

Что мне не хватает?

4b9b3361

Ответ 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" имеет правильный тип (строка)