Панды: Найти индекс ячейки: без учета регистра - PullRequest
0 голосов
/ 29 октября 2018

У меня есть функция, которая ищет значение во фрейме данных panda, используя встроенную функцию isin. Проблема в том, что я хотел бы сделать эту функцию нечувствительной к регистру. Я мог бы проанализировать каждую колонку в серии и использовать 'str.contains', но я нахожу это немного уродливым. Вы знаете хороший способ сделать это?

Вот функция, возвращающая индекс и столбец данного мира:

  def find_pos(self, titres):
    bool_table = self.document.isin(titres)
    for i in range(bool_table.shape[0]):
        for j in range(bool_table.shape[1]):
            boolean = bool_table.iloc[i][j]
            if boolean:
                return i, j

    print(titres, " not found in csv", file=sys.stderr)
    return -1, -1

Рабочий раствор - использовать лямбды:

bool_table = self.document.apply(lambda x: x.astype(str).str.lower()).isin([x.lower() for x in titres])

Поскольку я новичок в python, может быть, это не самый лучший способ сделать это?

1 Ответ

0 голосов
/ 29 октября 2018

Другой подход - сначала найти соответствующий столбец, а затем найти индекс строки. Используйте регулярное выражение для сопоставления без учета регистра.

Один из примеров методов:

def find_pos(search):
    pattern = '(?i)' + search  
    # search in each column
    for column in df:
        df2 = df[df[column].str.contains(pattern, regex=True)]
        if not df2.empty:
            # find row index and column index
            return (df2.index[0], df2.columns.get_loc(column))

idx = find_pos('to')
print(idx)

Я пробовал в следующих данных образца

import pandas as pd

df = pd.DataFrame(columns = ['Name', 'Location'])
df.loc[len(df)] = ['Mathew', 'Houston']
df.loc[len(df)] = ['Tony', 'New York']
df.loc[len(df)] = ['Jerom', 'Los Angeles']
df.loc[len(df)] = ['Aby', 'Dallas']
df.loc[len(df)] = ['Elma', 'Memphis']
df.loc[len(df)] = ['Zack', 'Chicago']
df.loc[len(df)] = ['Lisa', 'New Orleans']
df.loc[len(df)] = ['Nita', 'Las Vegas']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...