当前位置: 首页 > 面试题库 >

改善Pandas DataFrame的行追加性能

潘佐
2023-03-14
问题内容

我正在运行一个基本脚本,该脚本遍历嵌套字典,从每个记录中获取数据,并将其附加到Pandas DataFrame。数据看起来像这样:

data = {"SomeCity": {"Date1": {record1, record2, record3, ...}, "Date2": {}, ...}, ...}

总共有几百万条记录。脚本本身如下所示:

city = ["SomeCity"]
df = DataFrame({}, columns=['Date', 'HouseID', 'Price'])
for city in cities:
    for dateRun in data[city]:
        for record in data[city][dateRun]:
            recSeries = Series([record['Timestamp'], 
                                record['Id'], 
                                record['Price']],
                                index = ['Date', 'HouseID', 'Price'])
            FredDF = FredDF.append(recSeries, ignore_index=True)

但是,这非常缓慢。在寻找并行化方法之前,我只是想确保我没有错过任何明显的东西,这些东西可以使它按原样更快地执行,因为我对Pandas还是很陌生。


问题答案:

我还在循环中使用了数据框的 append 函数,感到困惑的是它的运行速度如何。

根据此页面上的正确答案,为遭受苦难的人提供有用的示例。

Python版本:3

熊猫版:0.20.3

# the dictionary to pass to pandas dataframe
dict = {}

# a counter to use to add entries to "dict"
i = 0

# Example data to loop and append to a dataframe
data = [{"foo": "foo_val_1", "bar": "bar_val_1"}, 
       {"foo": "foo_val_2", "bar": "bar_val_2"}]

# the loop
for entry in data:

    # add a dictionary entry to the final dictionary
    dict[i] = {"col_1_title": entry['foo'], "col_2_title": entry['bar']}

    # increment the counter
    i = i + 1

# create the dataframe using 'from_dict'
# important to set the 'orient' parameter to "index" to make the keys as rows
df = DataFrame.from_dict(dict, "index")

“ from_dict”函数:https
://pandas.pydata.org/pandas-
docs/stable/generation/pandas.DataFrame.from_dict.html



 类似资料:
  • 问题内容: 有没有人对如何提高CSS3动画的流畅度有一些作弊技巧?我使用css过渡将整个页面向左滑动,比我想要的更加混乱。它是一个元素,但由于页面复杂,因此包含许多圆角,渐变,阴影等。 在Flash ActionScript中,有一个方便的属性,可以在动画开始之前将动画元素转换为位图。这是天赐之物,可显着加快某些类型的动画的速度。CSS有这样的东西吗?是否还有其他技巧可以在不简化页面设计的情况下提

  • 这几乎完全是视频练习,其中我演示了如何改进你至今为止编写的代码的性能,但首先你应该尝试它。你已经分析了 练习 18 的代码的速度有多慢,所以现在是时候实现你的一些想法。修复简单的性能问题时,我会给你一个简单的列表来寻找和修改: 循环内的循环的重复计算可以避免。冒泡排序是经典案例,这就是我教它的原因。,一旦你看到,冒泡排序与其他方法相比有多糟糕,你将开始认识到这是一个需要避免的常见模式。 重复计算一

  • 问题内容: 我有一张地图,其中填充了大量数据(大约有300,000条记录) 并如下迭代 } 如上所述,我担心由于在for循环内执行上述操作而导致的性能问题。 更新: 情况是。我正在迭代一个包含大量数据的地图, 在迭代它时,我正在获取用户ID,并且我必须对用户ID进行计算。例如,考虑userid+some constants并应该在数据库表中对其进行更新。 并且还应该与我地图中的列表值一起添加到电子

  • 问题内容: 有没有一种方法可以改善这种SQL查询性能: 问题是当我的表中有许多数据(如百万行)时,子句的执行非常慢。我必须执行此验证,因为我无法插入重复的数据。 我使用SQLServer 2005 谢谢 问题答案: 确保您正在搜索索引列,而没有操纵这些列中的数据(例如子字符串等)

  • 问题内容: 我有一个水平月历,显示员工每天的活动。 当前它正在使用具有以下层次结构/流程的表 1)控制器:根据选择的月份/年份,生成一个包含该月每天的数组。$ scope。$ watchCollection每当年份或月份更改时都会更新数组。 如代码所示,我可以做的更好: 问题在于getAssignments()是“昂贵的”,因为它需要检查: 是公共假期吗? 员工在那天工作吗? 员工有假期吗? 获取

  • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我正在寻找可以改善jQuery调用选择器性能的任何方式。具体来说是这样的: 是不是快 我想可能是这样,但是我不知道jQuery是否足够聪明,可以首先通过标记名来限制搜索,等等。任何人都对如何制定jQuery选择器字符串以获得最佳性能有任何想法? 问题答案: 毫无疑问, 首先通过标记名进行