Pandas 处理 `csv` 数据类型问题

本文介绍了在Pandas中处理CSV数据时遇到的类型问题,包括数值精度丢失和字符串消失,通过提供修改前后的代码示例,展示了问题所在,并提出了解决方案,即使用converters参数来指定字段的数据类型。

Pandas 处理 csv 数据类型问题

在大数据开发和测试的场景中我们需要将数据在不同的格式之间进行转换,笔者在转换的时候遇到了两个问题,通过摸索找到了解决方法,遂分享给大家。

数据准备

  • 待处理的源 CSV 文件 test.csv

  • 目标 plain_text 文件 test.txt

原始文件内容如下:

原始 CSV

修改前的代码

import pandas as pd

df = pd.read_csv("test.csv")
df.to_csv("test.txt", sep="\t", header=False, index=False)

输出结果

错误的输出

消失的 0

party_no 是字符串类型,预期是按照 0000000000001234567 写入到 test.txt 中去。但是,实际写入的时候发现 0 消失了。

丢失的精度

test_decimal1 字段是浮点数类型,预期保留 2 位小数;test_decimal2 预期是保留 9 位小数。但是实际写入的时候发现精度丢失,只保留了一位。

如何解决

实际上我们在调用 pandas.read_csv 通过参数 converters 来指定字段的类型,这样可以避免上述的两个问题。参考代码如下

import pandas as pd
from decimal import Decimal

data_converters = {
    "party_no": str,
    "timestamp": str,
    "date": str,
    "test_decimal1": Decimal,
    "test_decimal2": Decimal,
}

df = pd.read_csv("test.csv", converters=data_converters)
df.to_csv("test.txt", sep="\t", header=False, index=False)

写入结果如下

正确的输出

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值