【问题标题】:fastest way to iterate pandas series/column迭代熊猫系列/列的最快方法
【发布时间】:2021-09-12 22:36:38
【问题描述】:

我更习惯于 for 循环,但是一旦您获得大量数据集,它们在 pandas 中就会变得很慢。我一直在寻找 iterrows、iter... 等示例,但想知道是否有更快的方法。我现在拥有的是

newnames = []
names = df['name'].tolist()
for i in names:
  i = i.replace(' ','_')
  newnames.append(i)

然后我可以将 newnames 列表作为 pandas 列添加到 df 中,或者我应该重写现有的 df['name'] 值吗?不太熟悉 pandas 的最佳实践,所以我欢迎所有反馈。谢谢

【问题讨论】:

    标签: python pandas dataframe series


    【解决方案1】:

    只需使用向量化的字符串操作:

    newnames = df['name'].str.replace(' ', '_', regex=False).tolist()
    

    通常,对于 Pandas,您希望尽可能避免循环。如果您查看库,通常有一些方法可以绕过循环,因此可以对 Pandas 进行一定程度的语法研究(除非您要查找的内容非常不标准)。

    基本上,如果您想做的事情表面上需要一个 for 循环,并且这样做可能是人们经常想要做的事情,那么它可能在库中。

    【讨论】:

      【解决方案2】:

      如果您最终想将新名称添加到df,您可以直接通过以下方式进行:

      df['newnames'] = df['name'].str.replace(' ', '_')
      

      如果只是想将name列全部替换为_,也可以直接在原列上做(覆盖),如下:

      df['name'] = df['name'].str.replace(' ', '_')
      

      在这两种方式中,我们都使用 Pandas 的矢量化操作,该操作已针对更快的执行进行了优化,而不是使用尚未优化且速度慢的循环。

      【讨论】:

        猜你喜欢
        • 2021-10-10
        • 1970-01-01
        • 2013-10-23
        • 2020-07-21
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-25
        相关资源
        最近更新 更多