熊猫在读取大型(2GB)CSV时会忽略标题

时间:2019-11-18 10:47:01

标签: python pandas csv dataframe

我正在尝试使用熊猫读取相当大的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搜索后,我决定只问一个问题。希望有人可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

问题出在将大型CSV文件传输到我的远程处理服务器(有足够的RAM进行内存编辑)时,出现了问题。处理本地计算机上的块似乎正常。

重新上传文件后,它在远程服务器上运行良好。