pandas - Pandas:读取带有可变时间戳的大 CSV
问题描述
我每天都有一个日志文件,它放在我的 LAN 中的 http 服务器上,每天增长到大约 3MB。每隔 15 秒,新值就会写入该文件。它有一个时间戳列。还有很多其他列我不需要,所以我只需要大约 5 列。Pandas 应该通过只读取新记录来“监控”该文件。假设最后一次执行是 2018-02-05 00:00:04.467 那么这应该是下一个运行时的过滤器 (>2018-02-05 00:00:04.467) 并且在这个运行时结束时最后一个时间戳读取应该是过滤下一个等等......我是熊猫的新手,还没有找到任何类似的线程。
解决方案
我猜 CSV 将逐行写入,因此您可以在变量中累积文件中的行数,而不是读取整个文件并进行过滤,rows
然后在下次运行时,使用传递带有值read_csv
的可选参数来跳过文件中的第一行,然后递增skiprows
range(1, rows + 1)
rows += len(df)
如果data.csv
是
a,b,c
1,2,3
4,5,6
7,8,9
3,2,1
6,5,4
并且rows = 2
(即,最后一次读取文件时它有 2 行)然后
df = pd.read_csv("data.csv", usecols=["a", "c"], skiprows=range(1, rows + 1))
将是数据框
a c
0 7 9
1 3 1
2 6 4
你会增加rows
rows += len(df) # rows now equals 5, so 5 rows would be skipped in the next run
推荐阅读
- ios - 如何访问 App Store 部署的应用程序的控制台输出?
- c# - 没有从数据库中获取表列表
- javascript - 跨不同子域的持久存储
- html - WickedPdf CSS 规则 `page-break-after: Avoid` 无法按预期工作
- java - 令人惊讶的“推断类型不符合上限”错误
- java - 为什么默认方法在 Java 8 中包含接口,而不是在 Collection Framework 中添加额外的接口?
- python - linux下使用ramdisk不直接访问文件
- firefox - Richfaces3.3 文件上传在 Mozilla Firefox 中不起作用
- angular - 使用 RouteReuseStrategy 处理重用路由的订阅
- akka - akka 演员是序列吗