迭代熊猫系列/列的最快方法

时间:2021-06-30 19:02:44

标签: python pandas dataframe series

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

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

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

2 个答案:

答案 0 :(得分:3)

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

<ul id="my_ul">
  <li>
    <span><i class="fa fa-trash"></i></span> Eat
  </li>
  <li>
    <span><i class="fa fa-trash"></i></span> Drink
  </li>
  <li>
    <span><i class="fa fa-trash"></i></span> Sleep
  </li>
</ul>

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

基本上,如果你想做的事情表面上需要一个 for 循环,而这样做可能是人们想要定期做的事情,它可能在图书馆中。

答案 1 :(得分:1)

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

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

如果只是想把name列的所有空格都换成_,也可以直接在原列上进行(覆盖),如下:

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

在这两种方式中,我们都使用 Pandas 的矢量化操作,该操作已经过优化以加快执行速度,而不是使用未经优化且速度较慢的循环。