【问题标题】:Fastest way to generate new rows and append them to DataFrame生成新行并将它们附加到 DataFrame 的最快方法
【发布时间】:2021-04-24 19:36:56
【问题描述】:

我想在一定的区间内改变数据集中的目标值。当使用 500 个数据时,大约需要 1.5 秒,但我有大约 100000 个数据。大部分执行时间都花在了这个过程中。我想加快速度。

What is the fastest and most efficient way to append rows to a DataFrame? 我尝试了此链接中的解决方案,尝试创建字典,但我做不到。

这是 500 条数据大约需要 1.5 秒的代码。

def add_new(df,base,interval):
    df_appended = pd.DataFrame() 
    np.random.seed(5)
    s = np.random.normal(base,interval/3,4)
    s = np.append(s,base)
    for i in range(0,5):
        df_new = df
        df_new["DeltaG"] = s[i]
        df_appended = df_appended.append(df_new)
    return df_appended

【问题讨论】:

    标签: python dataframe dictionary


    【解决方案1】:
    def add_new(df1,base,interval,has_interval):
        dictionary = {}
        if has_interval == 0:
            for i in range(0,5):
                dictionary[i] = (df1.copy())
        elif has_interval == 1:
            np.random.seed(5)
            s = np.random.normal(base,interval/3,4)
            s = np.append(s,base)
            for i in range(0,5):
                df_new = df1
                df_new[4] = s[i]
    
                dictionary[i] = (df_new.copy())
        return dictionary
    

    它有效。整个数据大约需要 10 秒。感谢您的回答。

    【讨论】:

      【解决方案2】:

      pandas 中的 DataFrames 是内存的连续和平,因此附加或连接等数据帧效率非常低 - 此操作创建新 DataFrames 并覆盖旧 DataFrames 中的所有数据。 但是基本的python结构如list和dicts不是,当向它追加新元素时,python只是创建指向结构新元素的指针。

      所以我的建议 - 对列表或字典进行所有数据处理,最后将它们转换为 DataFrame。

      另一个建议是创建最终大小的预分配 DataFrame,然后使用 .iloc 更改其中的值。但它只有在您知道生成的 DataFrame 的最终大小时才有效。

      带有代码的好例子:Add one row to pandas DataFrame

      如果您需要更多代码示例,请告诉我。

      【讨论】:

      • 嗯,谢谢你的回答。通常“df”参数是单行数据框列。您能否让我知道如何轻松获得单行数据框?我对每一行使用 df[i:i+1] 。我认为它也是低效的。
      • @kukuro 我想从数据框中选择一行的最佳方法是使用.loc 按标签选择(该行的索引列值)或.iloc 按整数索引选择。在此处阅读更多信息,例如:stackoverflow.com/questions/16096627/…
      猜你喜欢
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2019-04-10
      • 2011-06-11
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多