我正在尝试使用熊猫读取相当大的CSV(2 GB),以进行一些数据类型操作,并与之前已经加载的其他数据帧结合。由于我想对内存稍加注意,因此决定分批读取它。出于问题的考虑,这里是我的CSV布局的摘录,其中包含虚拟数据(不能真正共享真实数据,对不起!):
institution_id,person_id,first_name,last_name,confidence,institution_name
1141414141,4141414141,JOHN,SMITH,0.7,TEMP PLACE TOWN
10123131114,4141414141,JOHN,SMITH,0.7,TEMP PLACE CITY
1003131313188,4141414141,JOHN,SMITH,0.7,"TEMP PLACE,TOWN"
18613131314,1473131313,JOHN,SMITH,0.7,OTHER TEMP PLACE
192213131313152,1234242383,JANE,SMITH,0.7,"OTHER TEMP INC, LLC"
我的熊猫代码读取文件:
inst_map = pd.read_csv("data/hugefile.csv",
engine="python",
chunksize=1000000,
index_col=False)
print("processing institution chunks")
chunk_list = [] # append each chunk df here
for chunk in inst_map:
# perform data filtering
chunk['person_id'] = chunk['person_id'].progress_apply(zip_check)
chunk['institution_id'] = chunk['institution_id'].progress_apply(zip_check)
# Once the data filtering is done, append the chunk to list
chunk_list.append(chunk)
ins_processed = pd.concat(chunk_list)
我正在应用的zip check
函数基本上是在执行一些数据类型检查,然后将其转换为整数。
每当我读取CSV时,它只会读取institution_id
列并生成索引。 CSV中的其他列只是被静默删除。
当我不使用index_col = False作为选项时,它将仅将1141414141/4141414141/JOHN/SMITH/0.7
(基本上是行中的前5个值)设置为索引,而仅将institution_id
设置为标题,而仅读取{ {1}}作为值插入数据框。
老实说,我不知道这是怎么回事,经过2小时的SO / google搜索后,我决定只问一个问题。希望有人可以帮助我,谢谢!
答案 0 :(得分:0)
问题出在将大型CSV文件传输到我的远程处理服务器(有足够的RAM进行内存编辑)时,出现了问题。处理本地计算机上的块似乎正常。
重新上传文件后,它在远程服务器上运行良好。