当前位置: 首页 > news >正文

东莞网站建设图表dw做网站时怎么改为绝对路径

东莞网站建设图表,dw做网站时怎么改为绝对路径,做网站的公司主要工作是什么,十大软件公司Dask read_csv 数据类型不一致问题深度解析 问题描述 在使用 Dask 的 read_csv 函数读取多个 CSV 文件时,如果同一列在不同文件中包含不同的数据类型(比如一个文件全是整数,另一个文件包含英文字符),经常会遇到类型转换…

Dask read_csv 数据类型不一致问题深度解析

问题描述

在使用 Dask 的 read_csv 函数读取多个 CSV 文件时,如果同一列在不同文件中包含不同的数据类型(比如一个文件全是整数,另一个文件包含英文字符),经常会遇到类型转换错误。本文将从源码层面深入分析这个问题的根本原因。

核心问题分析

1. 数据类型推断机制

Dask 在处理多个 CSV 文件时,只从第一个文件的开头部分采样来推断数据类型,然后将这个推断出的数据类型强制应用到所有文件的所有数据块上。

源码分析

dask/dask/dataframe/io/csv.pyread_pandas 函数中:

def read_pandas(reader,urlpath,blocksize="default",lineterminator=None,compression=None,sample=256000,  # 默认只采样256KBenforce=False,assume_missing=False,storage_options=None,include_path_column=False,**kwargs,
):# ... 其他代码 ...# 从第一个文件采样head = reader(BytesIO(b_sample), **kwargs)

这里的 b_sample 来自 read_bytes 函数,只从第一个文件采样

# dask/dask/bytes/core.py
with OpenFile(fs, paths[0], compression=compression) as f:# 只读取第一个文件的样本if delimiter is None:sample = f.read(sample)else:# 确保在完整行边界结束sample_buff = f.read(sample)while True:new = f.read(sample)if not new:breakif delimiter in new:sample_buff = (sample_buff + new.split(delimiter, 1)[0] + delimiter)breaksample_buff = sample_buff + new

2. 数据类型强制应用

text_blocks_to_pandas 函数中,将推断出的数据类型保存:

dtypes = head.dtypes.to_dict()

然后在 pandas_read_text 函数中对每个数据块强制应用这些数据类型:

def pandas_read_text(reader, b, header, kwargs, dtypes=None, ...):# ... 其他代码 ...df = reader(bio, **kwargs)if dtypes:coerce_dtypes(df, dtypes)  # 强制类型转换

3. 类型转换和错误检测

coerce_dtypes 函数中处理类型转换:

def coerce_dtypes(df, dtypes):bad_dtypes = []errors = []for c in df.columns:if c in dtypes and df.dtypes[c] != dtypes[c]:actual = df.dtypes[c]desired = dtypes[c]try:df[c] = df[c].astype(dtypes[c])except Exception as e:bad_dtypes.append((c, actual, desired))errors.append((c, e))if bad_dtypes:# 抛出详细的错误信息raise ValueError(dtype_msg)

采样机制详解

默认采样大小

Dask 的默认采样大小只有 256KB(约25万字节),这对于大型文件来说是非常小的。

采样策略

  1. 只从第一个文件采样:不会扫描其他文件
  2. 从文件开头开始:只读取文件的前256KB
  3. 确保完整行边界:如果指定了分隔符,会确保采样在完整行边界结束

问题场景示例

假设有两个CSV文件:

file1.csv(很大,有1000万行):

id,name,value
1,Alice,100
2,Bob,200
...
9999999,Charlie,9999999
a,David,invalid  # 第1000万行有字符串

file2.csv

id,name,value
b,Eve,300
c,Frank,400

Dask的处理流程:

  1. file1.csv 采样前256KB(可能只到第9999999行)
  2. 推断 id 列为 int64 类型
  3. 处理 file1.csv 时:1,2,3...int64
  4. 处理 file1.csva 行时:尝试转换为 int64 → 失败 ❌
  5. 处理 file2.csv 时:尝试将 b,c 转换为 int64 → 失败 ❌

解决方案

1. 手动指定数据类型(推荐)

# 将可能有混合类型的列指定为object类型
df = dd.read_csv('*.csv', dtype={'id': 'object'})

2. 使用 assume_missing 参数

# 假设所有未指定的整数列都包含缺失值,转换为浮点数
df = dd.read_csv('*.csv', assume_missing=True)

3. 增加采样大小

# 增加采样字节数,提高类型推断准确性
df = dd.read_csv('*.csv', sample=10000000)  # 10MB采样

4. 预处理数据

# 在读取前统一数据类型
import pandas as pd# 先读取小样本确定所有可能的数据类型
sample_df = pd.read_csv('file1.csv', nrows=1000)
print(sample_df.dtypes)# 然后指定合适的dtype
df = dd.read_csv('*.csv', dtype={'id': 'object', 'value': 'float64'})

设计原因

Dask 采用这种设计主要是为了性能考虑:

  1. 避免全文件扫描:不需要在读取阶段扫描所有文件来确定数据类型
  2. 保持延迟计算:维持 Dask 的延迟计算优势
  3. 内存效率:避免将大量数据加载到内存中进行类型推断

但代价是要求所有文件的数据类型必须一致,或者需要用户手动指定数据类型。

最佳实践

  1. 数据标准化:在生成CSV文件时,确保同一列在所有文件中使用相同的数据类型
  2. 明确指定dtype:对于可能有混合类型的列,明确指定为 object 类型
  3. 合理设置采样大小:根据数据特点调整 sample 参数
  4. 数据验证:在读取前先检查数据的一致性

总结

Dask read_csv 的数据类型不一致问题源于其只从第一个文件开头采样256KB来推断类型的机制。这种设计在性能和数据一致性之间做了权衡。理解这个机制后,我们可以通过手动指定数据类型、调整采样大小或预处理数据等方式来解决这个问题。

对于需要处理大量异构CSV文件的场景,建议在数据生成阶段就做好类型标准化,或者在读取时明确指定数据类型,这样可以避免运行时错误并提高处理效率。

http://www.dtcms.com/a/409426.html

相关文章:

  • 国家示范建设成果网站南宁网站建设智能优化
  • 网页制作模板的网站免费多张图做网站背景
  • 滦平县建设局网站河南如何优化网站
  • 做网站开发电脑配置网站建设费用是什么科目
  • 中国建设银行数据管理部网站生活+装修 北京卫视
  • 公司网页网站如何做苏州展厅设计企业
  • 网站在什么地方设关键词做网站都要用到框架吗
  • 电商 网站 备案360指数官网
  • 全国建设网站图片Pc端做社区网站用什么框架
  • 长沙工作室网站建设网站免费建站的方法
  • 网站主色调wordpress漂浮广告插件
  • 超级链接网站模板大淘客网站logo怎么做
  • 教育培训机构招生网站建设高端网站建设的公司哪家好
  • 梅河口市住房和城乡建设局网站网络游戏下载平台
  • 做app的网站有哪些功能营销网站建设
  • 网站同城在线哪里做做外汇模拟的网站
  • 免费网站制作推广东莞推广优化公司
  • asp源码 自助建站买个网址多少钱
  • 如何开一家网站建设公司?网站如何做微信支付
  • 创一个网站怎样赚钱网站设计优化
  • 网站配色主题电脑有固定IP 做网站
  • 做一手楼盘的网站企业服务平台公众号
  • 百度网站地图在线生成免费做ppt网站
  • 做有关兼职网站的需求分析建设网站费用主要包括哪些
  • 没备案能做网站吗wordpress云采插件
  • 关于企业网站建设的市场比质比价调查报告网页搜索记录怎么删除
  • 乐清网站推广公司百度2023免费下载
  • 网站菜单分类怎么做的a 朝扬网络网站建设
  • 沈阳网站前端wordpress全自动赚钱
  • 建设vip网站相关视频北京排名前10的公关公司