假设我有一个大型 CSV 文件,其中包含有关在给定日期和时间是否下雨的数据。一个玩具示例如下。
Day, Time, Rain
1, 0800, 1
1, 0818, 0
1, 0842, 1
1, 0900, 0
2, 0800, 0
2, 0822, 1
2, 0845, 1
2, 0900, 1
我希望编写代码来计算一天中下雨的时间比例。我的计算方法如下(从当天的第二次观察开始):
- 如果在该观察和上一次观察之间没有下雨,则整个期间不算作下雨。
- 如果在这次观察和之前的观察之间下雨,那么整个期间都算作下雨
- 如果恰好有一次观测和之前的观测在下雨,则有一半时间计为下雨。
例如,第 1 天下了 30 分钟的雨(0800 到 0818 的一半,0818 到 0842 的一半,0842 和 0900 的一半)。第 2 天下了 49 分钟的雨(从 0800 到 0822 的一半时间,以及从 0822 到 0900 的雨)。
如何在 Python 中快速完成此操作?我知道 for line in file: 遍历每一行,但不存储前一行的内存。
请您参考如下方法:
我会维护一个变量来保存看到的最后一行并在每次迭代时更新它:
last_line = None
for line in lines:
# You need to change this to explicitly check against None if line can be empty
if not last_line:
# Handle no last line on the first iteration
# Use line and last_line
# Update the last line seen
last_line = line
您还可以在开始时将 last_line 默认为有效值,这样就无需在循环中检查它。但这并不总是可行的。
可以想象,还有更复杂的方法,例如使用自身版本压缩 行,其中每个元素都偏移一个,但这可能要简单得多。
