首页 > 解决方案 > 使用 Dask 读取的参差不齐的 CSV 会产生 DtypeWarning - 加载时忽略“nan”的选项?

问题描述

我正在尝试使用 Dask 读取一个约 500MB 的大型 CSV 文件,其中包含一起读取的 float 和 str 列对,导致一次将两个列表读入内存。这工作没有错误,但我得到一个 DtypeWarning,因为它是一个参差不齐的 CSV(列长度在对之间显着不同)并且它混合了 nan(float)和字符串,然后我可以用 .dropna()过滤掉。

数据结构(实际上要大得多):

Col1: [1, 2, 3, 4, nan, nan, nan] -> (ok, no warning)
Col2: ['A', 'B', 'C', 'D', nan, nan, nan] -> (mixed str and float; DtypeWarning)

我想避免使用 low_memory=False ,因为这会显着影响执行时间(慢约 6 倍),但不只是忽略错误感觉是一种好习惯。

有没有办法改进下面的示例代码以防止上述警告?

import pandas as pd
import dask.dataframe as dd
    
length = 10000000
ratio = 0.9
A = {'A': [0.07]*length, 'B': ['a']*int(length*ratio) + [float('nan')]*(length-int(length*ratio))}
pd.DataFrame(A).to_csv('testing.csv')
df = dd.read_csv('testing.csv')['B'].compute().dropna().tolist()

标签: pythonpandasdataframedasknan

解决方案


一些建议:

  1. 如果文件适合内存,使用 plain 通常更方便pandasdask大型任务/文件的并行处理带来的好处。

  2. 可能值得dtype明确指定,例如dtype='str'或酌情指定。


推荐阅读