如何使用Python或R高效地从海量CSV中提取唯一行

2024-04-24 15:58:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的CSV(1.4gb,超过1MM行)的股市数据,我将使用R

这张桌子大致上像这样。对于每个股票代码,有数千行数据。你知道吗

+--------+------+-------+------+------+
| Ticker | Open | Close | High | Low  |
+--------+------+-------+------+------+
| A      |  121 |   121 |  212 | 2434 |
| A      |   32 |    23 |   43 |  344 |
| A      |  121 |   121 |  212 | 2434 |
| A      |   32 |    23 |   43 |  344 |
| A      |  121 |   121 |  212 | 2434 |
| B      |   32 |    23 |   43 |  344 |
+--------+------+-------+------+------+

为了简化处理和测试,我使用这个问题中提到的脚本将这个庞然大物分解成更小的文件:How do I slice a single CSV file into several smaller ones grouped by a field?

脚本将输出data_a.csvdata_b.csv等文件

但是,我还想创建index.csv,它只列出所有唯一的股票代码名。你知道吗

例如

+---------+
| Ticker  |
+---------+
| A       |
| B       |
| C       |
| D       |
| ...     |
+---------+

当处理一个巨大的文件时,有没有人能推荐一种在R或Python中有效的方法?你知道吗


Tags: 文件csv数据脚本closedataopen股市
2条回答

可以从文件名检索索引:

(index <- data.frame(Ticker = toupper(gsub("^.*_(.*)\\.csv",
                                           "\\1",
                                           list.files()))))
##   Ticker
## 1      A
## 2      B

write.csv(index, "index.csv")

您可以循环遍历每个文件,获取每个文件的索引,并创建一组所有索引的并集。你知道吗

import glob

tickers = set()
for csvfile in glob.glob('*.csv'):
    data = pd.read_csv(csvfile, index_col=0, header=None)  # or True, however your data is set up
    tickers.update(data.index.tolist())

pd.Series(list(tickers)).to_csv('index.csv', index=False)

相关问题 更多 >