могу ли я разделить значение в строке pandas для поиска?

#python #pandas

#питон #панды

Вопрос:

Я ищу DF, используя:

 df.loc[df['Ticker'] == 'ibm'
 

Проблема df['Ticker'] в том, что после него форматируется другое значение (например, «ibm US»).

обычно для строки я могу сделать что-то вроде .split[" "][0] поиска совпадения, но это не работает для моего поиска pandas выше ( df.loc[df['Ticker'].split[" "][0] == 'ibm' — fails with AttributeError: 'Series' object has no attribute 'split' ).

Что я могу сделать для достижения своей цели?

Комментарии:

1. pandas.pydata.org/pandas-docs/stable/reference/api/…

2. Вы можете создать пользовательскую функцию с помощью data[data["Ticker"].apply(lambda x : "ibm" in x)] или вы можете использовать data[data["Ticker"].str.contains("ibm")]

3. Все строковые методы в pandas начинаются с .str . То, что вы хотите, это: df.loc[df['Ticker'].str.split(" ").str[0] == 'ibm']

4. @Lostsoul затем вы можете изменить свою apply функцию следующим образом data[data["Ticker"].apply(lambda x : x.split()[0] == "ibm")]

5. Обратите внимание, по умолчанию .split() по умолчанию используется значение space-seoerator .

Ответ №1:

Вы ищете str.contains ?:

 new_df = df[df['Ticket'].str.contains(r'ibm',case=False)]
 

который создаст новый фрейм данных из строк, в которых столбец ‘Ticker’ содержит ‘ibm’.

Вы можете использовать or и case=False (без учета регистра) в str.contains :

 new_df = df[df['Ticket'].str.contains(r'ibm|msft|google|..',case=False)]
 

Комментарии:

1. Спасибо — что, если тикер будет «us», будет ли он соответствовать всем американским тикерам, у которых МЫ в конце? В этом случае я пытаюсь специально сопоставить с первым символом, разделенным пробелом

2. Как насчет —> df[['col1', 'col2']] = df['Ticker'].str.split(" ",n=1, expand=True) , а затем фильтровать новый .loc фрейм данных с помощью?