【问题标题】:Specifying data type in Pandas csv reader在 Pandas csv 阅读器中指定数据类型
【发布时间】:2012-05-14 21:01:58
【问题描述】:

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

【问题讨论】:

  • 请向我们展示您的代码
  • @Gardner:你考虑过接受答案吗?

标签: python pandas


【解决方案1】:

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

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

【讨论】:

  • 请注意,这对于某些其他输入函数不可用(但希望如此),例如 pandas.read_fwf()
  • 我重温了主题,对dtype的支持已经添加到pandas.read_fwf :)
  • 此方法不适用于大型数据集是否有任何其他方法可以读取 csv 并且仅读取特定列。
  • 当输入是字节 io 对象时,这不起作用,我收到错误 EmptyDataError: No columns to parse from file。有什么办法解决这个问题?
【解决方案2】:

看起来您无法避免 pandas 尝试转换 CSV 文件中的数字/布尔值。查看用于 IO 解析器的 pandas 的源代码,特别是函数 _convert_to_ndarrays_convert_typeshttps://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

您总是可以在您阅读文件后分配您想要的类型

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

【讨论】:

  • 感谢@lbolla,这有助于我的一个错误修复,其中一个浮点值被读取为字符串,因为另一列是字符串,后来导致聚合函数出现问题。我不得不做 df['col'] = df['col'].astype(float64)
  • 说我有一列 ids(全是 int),我想用作字符串,但在某些情况下,pandas 会将它们读为 float, 1->1.0, 2-> 2.0,然后不先将其转换回int,它将被转换为'1.0','2.0',这是不可取的。这就是为什么我只想让 pandas 将其读取为字符串。
  • 这不是答案。您的解决方案无法解决大文件上的内存错误问题。
  • 这不能解决前导零丢失的问题
猜你喜欢
  • 2014-03-26
  • 2018-06-05
  • 2020-11-13
  • 2013-03-06
  • 1970-01-01
  • 2018-10-12
  • 2017-05-20
  • 2023-04-04
相关资源
最近更新 更多