#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
фрейм данных с помощью?