yan*_*gxg 6 python database bigdata pandas
我有一个太大而无法加载到内存中的 csv 文件。我需要删除文件的重复行。所以我按照以下方式操作:
chunker = pd.read_table(AUTHORS_PATH, names=['Author ID', 'Author name'], encoding='utf-8', chunksize=10000000)
for chunk in chunker:
chunk.drop_duplicates(['Author ID'])
Run Code Online (Sandbox Code Playgroud)
但是如果重复的行分布在不同的块中,上面的脚本似乎无法获得预期的结果。
有没有更好的办法?
你可以尝试这样的事情。
首先,创建你的分块器。
chunker = pd.read_table(AUTHORS_PATH, names=['Author ID', 'Author name'], encoding='utf-8', chunksize=10000000)
Run Code Online (Sandbox Code Playgroud)
现在创建一组 id:
ids = set()
Run Code Online (Sandbox Code Playgroud)
现在迭代块:
for chunk in chunker:
chunk.drop_duplicates(['Author ID'])
Run Code Online (Sandbox Code Playgroud)
但是,现在,在循环体内,还删除已知 id 集中已有的 id:
chunk = chunk[~chunk['Author ID'].isin(ids)]
Run Code Online (Sandbox Code Playgroud)
最后,仍在循环体内添加新的 id
ids.update(chunk['Author ID'].values)
Run Code Online (Sandbox Code Playgroud)
如果ids太大而无法放入主内存,您可能需要使用一些基于磁盘的数据库。
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |