python - 使用 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()
解决方案
一些建议:
如果文件适合内存,使用 plain 通常更方便
pandas
。dask
大型任务/文件的并行处理带来的好处。可能值得
dtype
明确指定,例如dtype='str'
或酌情指定。
推荐阅读
- vue.js - v-card 内的导航抽屉在 Vuetify 中不起作用
- python - 一个功能只有一小部分在工作
- react-native - React-Native Flatlist Single Item Selector 在渲染不同的组件时无法更新组件
- android - 如何通过动态创建的按钮在 Fragment 之间导航?
- javascript - (反应)如何将状态的值设置为具有对象的属性的对象?
- java - Java - 与 Jackson 一起编写 Json
- python - 用于创建 sql 查询的 Python 脚本
- flutter - 使用自定义笔画帽在颤动中创建自定义圆形进度指示器
- javascript - 使用嵌入返回消息
- r-markdown - Rmarkdown 路径不存在