【问题标题】:Iterating over pandas Series only executes once遍历 pandas Series 只执行一次
【发布时间】:2017-11-23 08:33:16
【问题描述】:

我在“索引”中有超过 8000 项,但 for 循环只为第一项工作。

from datetime import datetime
from pandas import Series
from pandas import DataFrame

series = Series.from_csv('something.csv', header=1)
index = DataFrame(series.index)

for item in index:
    dt = datetime.strptime(item, "%Y-%m-%d %H:%M:%S.%f")
    dt = dt.time().isoformat()
    print(dt)

所以索引列中的项目如下所示:1998-02-14 19:30:54.052000

for 循环执行此操作19:30:54.052000,但仅针对第一行。知道为什么吗?

【问题讨论】:

  • 如果您包含一个重现此行为的 index 样本,那将是有益的。

标签: python pandas datetime for-loop


【解决方案1】:

这不是您遍历系列项目的方式。您所做的会遍历 ,而在一个系列中,只有一个。这就是为什么它只执行一次。如果无法通过矢量化操作实现您的目标,请使用Series.iteritems

for idx, item in index.iteritems():
    dt = ...

但在这种情况下,您可以使用 Series.apply 代替 for 循环。

index.apply(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S.%f").time().isoformat())

【讨论】:

  • 谢谢!有用。现在我收到另一个错误,来自“%Y-%m-%d %H:%M:%S.%f”。问题是我有一些带小数秒的数据,而有些则没有(例如:19:30:54.052000 和简单的 19:30:55)。我怎样才能使它适用于这两种类型?再次感谢您!
  • 这是一个不同的问题,您应该这样发布。如果需要,您可以通过包含链接来参考此问题。
  • 谢谢,我同时修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 2019-08-01
  • 2019-10-26
  • 1970-01-01
  • 2018-12-28
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多