使用 pandas 库处理一个性能参数的 csv 文件,但是 csv 文件是分片的,格式如下
time | A | B | C | D |
---|---|---|---|---|
20:00 | 0 | 1 | 2 | 3 |
time | E | F | G | H |
20:00 | 4 | 5 | 6 | 7 |
... |
现在想读成如下格式,存成一个 dataframe 便于下游继续处理
time | A | B | C | D | E | F | G | H | ... |
---|---|---|---|---|---|---|---|---|---|
20:00 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
现在是通过跳过 n 行读取,然后拼接的方案,会存在多次调用 pandas.read_csv,性能太差了,想请教一个 python 大佬们有什么高效的办法
pandas.read_csv(target_file, skiprows=skip_rows, nrows=range, skipinitialspace=True) skip_rows = skip_rows + range
1
lpts007 2021-02-07 16:36:41 +08:00 via Android
哪边产生的这种文件,让他改
|
3
starzh 2021-02-07 16:57:57 +08:00
或者先把文件切片再喂给 pandas,这样读取的次数会少一些
|
4
starzh 2021-02-07 17:00:57 +08:00
假如按照你的例子,字段从 A 到 L,那就把文件分成 3 个小文件,这样 pandas 就只用读 3 次,最后再把 3 个 dataframe 拼起来就好了
|
5
nano91 2021-02-07 17:06:29 +08:00
都在一个 csv 文件,那你一次性读完,然后筛不就行了,读完后 EFGH 被当成了行数据,这样的话,你把 EFGH 这种行数据给筛掉不就行了,再不济,既然你已经有 skip 的解决方法,就说明每个分片的长度是固定的,那就先转 list,[begin:end:skip]做切片然后转回 dataframe 不就行了
|
7
learningman 2021-02-07 17:14:40 +08:00
换 C++预处理(
C++处理 csv 还算能写 |
8
sdushn OP |
9
sdushn OP @learningman 流下了没有技术的泪水,C++更不会写了
|
12
cassidyhere 2021-02-07 23:29:14 +08:00 via Android
各位想复杂了,pandas.read_csv 有现成的 chunksize 参数
|
13
xchaoinfo 2021-02-08 09:52:18 +08:00 via Android
如果你用 Excel 应该怎么处理?
pandas 当成一个可编程的 Excel 。对比下,操作罗辑就很清楚了 |