我有一个巨大的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.csv
,data_b.csv
等文件
但是,我还要创建index.csv
,它只列出所有唯一的股票代码名称。
E.g。
+---------+
| Ticker |
+---------+
| A |
| B |
| C |
| D |
| ... |
+---------+
在处理庞大的文件大小时,有人可以推荐一种在R或Python中执行此操作的有效方法吗?
答案 0 :(得分:1)
你可以遍历每个文件,获取每个文件的索引并创建所有索引的集合联合。
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)
答案 1 :(得分:0)
您可以从文件名中检索索引:
(index <- data.frame(Ticker = toupper(gsub("^.*_(.*)\\.csv",
"\\1",
list.files()))))
## Ticker
## 1 A
## 2 B
write.csv(index, "index.csv")