【问题标题】:How to iterate through pandas data frame that meet some condition and append those rows to new data frame?如何遍历满足某些条件的熊猫数据框并将这些行附加到新数据框?
【发布时间】:2021-01-28 22:32:28
【问题描述】:

我正在尝试创建一个函数 (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)

当我尝试使用 for 或 while 循环而不是固定索引 (0) 进行迭代时,问题就出现了,因为我从来没有获得附加满足条件的行的函数。

这是我尝试使用的具体说明:

for i in range len(get_filter('star')):
    filtered_df.append(df[df['Title'].str.contains(get_filter('star')[i])])

filtered_df 返回始终为空

【问题讨论】:

    标签: python pandas dataframe loops append


    【解决方案1】:

    pd.DataFrame.append 方法返回一个新对象。在您的代码中,您正在附加一个新的 DataFrame - 它在每次迭代时都会丢失,因此返回一个空的 DataFrame。

    您需要在循环中更新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)
    

    应该可以。

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多