在 Pandas csv reader 中指定数据类型

问题描述 投票:0回答:3

我刚刚开始使用 Pandas,我正在使用

read_csv()
方法读取 csv 文件。我遇到的困难是阻止 pandas 将我的电话号码转换为大数字,而不是将它们保留为字符串。我定义了一个转换器,它只保留数字,但随后它们仍然转换为数字。当我更改转换器以在电话号码前面添加“z”时,它们仍然是字符串。有没有办法在不修改字段值的情况下保留它们的字符串?

python pandas
3个回答
102
投票

从 Pandas 0.11.0 开始,您可以使用 dtype 参数显式指定每列的数据类型:

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'})

21
投票

看起来你无法避免 pandas 尝试转换 CSV 文件中的数字/布尔值。查看 IO 解析器的 pandas 源代码,特别是函数

_convert_to_ndarrays
_convert_types
https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

您可以随时在阅读文件后指定您想要的类型:

df.phone = df.phone.astype(str)
    

0
投票
我很幸运,将整个文件作为字符串读取,然后手动指定数据类型。在我的情况下,我有一列的 ID 可能包含“08”等字符串,这与 ID“8”不同。

我尝试的第一件事是df = pd.read_csv(dtype={"ID": str})

,但由于某种原因,这仍然将“08”转换为“8”(至少它仍然是一个字符串,但它必须首先被解释为一个整数,这删除了前导0).

对我有用的是:
df = pd.read_csv(dtype=str)

然后我可以根据需要手动分配其他列的数据类型,就像 @lbolla 提到的那样。

出于某种原因,在整个文档中应用数据类型跳过了我认为的类型推断步骤。令人烦恼的是,这不是指定特定列数据类型时的默认行为:(

© www.soinside.com 2019 - 2024. All rights reserved.