Как выполнить итерацию по фрейму данных pandas, который соответствует некоторому условию, и добавить эти строки в новый фрейм данных?

#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)
  

должно работать.