read_csv()
方法读取 csv 文件。我遇到的困难是阻止 pandas 将我的电话号码转换为大数字,而不是将它们保留为字符串。我定义了一个转换器,它只保留数字,但随后它们仍然转换为数字。当我更改转换器以在电话号码前面添加“z”时,它们仍然是字符串。有没有办法在不修改字段值的情况下保留它们的字符串?
从 Pandas 0.11.0 开始,您可以使用 dtype 参数显式指定每列的数据类型:
d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'})
看起来你无法避免 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)
我尝试的第一件事是df = pd.read_csv(dtype={"ID": str})
对我有用的是:
df = pd.read_csv(dtype=str)
然后我可以根据需要手动分配其他列的数据类型,就像 @lbolla 提到的那样。
出于某种原因,在整个文档中应用数据类型跳过了我认为的类型推断步骤。令人烦恼的是,这不是指定特定列数据类型时的默认行为:(