#python #pandas #dataframe #loops #append
#python #pandas #фрейм данных #циклы #добавить
Вопрос:
Я пытаюсь создать функцию (get_filtered_df), которая, учитывая фильтр и набор данных, выполняет итерацию по определенному столбцу и применяет некоторую функцию (get_filter), которая ищет строки, соответствующие этим условиям, и добавляется в некоторый конечный фрейм данных.
Это то, чего я достиг до сих пор:
def get_filter(filter):
string_container = []
string_container.append(filter.upper())
string_container.append(filter.lower())
# More conditions here
return (string_container)
def get_filtered_df(string_container, df):
filtered_df = pd.DataFrame(df[df['Titles'].str.contains(string_container[0])], columns=df.columns)
return(filtered_df)
Проблема возникает, когда вместо фиксированного индекса (0) я пытаюсь выполнить итерацию, используя цикл for или while, поскольку я никогда не получаю функцию для добавления строк, удовлетворяющих условиям.
Это конкретная инструкция, которую я пытался использовать:
for i in range len(get_filter('star')):
filtered_df.append(df[df['Title'].str.contains(get_filter('star')[i])])
filtered_df возвращает всегда пустой
Ответ №1:
Метод pd.DataFrame.append возвращает новый объект. В вашем коде вы добавляете новый фрейм данных, который теряется на каждой итерации, следовательно, возвращая пустой фрейм данных.
Вам необходимо обновить filtered_df
в своем цикле, чтобы обновить filtered_df
:
def get_filtered_df(string_container, df):
filtered_df = pd.DataFrame(data=None, columns=df.columns)
for i in range(len(string_container)):
filtered_df = filtered_df.append(df[df['Titles'].str.contains(string_container[i])], ignore_index=True)
return(filtered_df)
должно работать.