【问题标题】:Pandas: read excel nrows not working, and dtype does not preserve 0 paddingPandas:读取 excel nrows 不起作用,并且 dtype 不保留 0 填充
【发布时间】:2018-07-12 02:30:45
【问题描述】:

在读取 excel 时,在指定 dtype 和 nrows 时,我难以定义参数。

我们以这个以 excel .xlsx 格式保存的小表格为例。 'col1' 数字用 0 填充。

col1    col2
01  a
02  b
03  c
04  d

第一个问题,我想阅读整个表格但保留填充。我尝试使用 dtype 定义为 object 或 str,并使用转换器(如下)。 dtype 转换为 object,但是不保留填充。有没有办法做到这一点?

pd.read_excel(path, sheetname=0, dtype={'col1': object}, nrows=5)
pd.read_excel(path, sheetname=0, converters={'col1':lambda x: str(x)}, nrows=5)

第二个问题,我尝试使用 nrows(如下)提取数据帧的一个子集。但是,这根本不起作用,仍然拉出整个表。

pd.read_excel(path, sheetname=0, nrows=2)

对于这两种情况,它在pd.read_csv 中都可以正常工作

我正在使用 pandas v0.20.3。

【问题讨论】:

  • 如果您在 excel 中格式化某些内容并不意味着存储在 excel 文件中的值实际上是“01”。将其保存为 csv 并在记事本中打开。我的猜测是你不应该看到“01”而是“1”
  • 好的,注意,nrows 问题如何?这是一个错误吗?
  • nrows 适用于 pandas v 23 而您正在使用 v 20

标签: python pandas


【解决方案1】:

如果您在 excel 中格式化某些内容,并不意味着存储在 excel 文件中的值实际上是“01”。将其保存为 csv 并在记事本中打开。我的猜测是你不应该看到“01”而是“1”

nrows 适用于 pandas v 23,您正在使用 v 20

【讨论】:

    【解决方案2】:

    格式化不起作用的原因是 Excel 的格式化只改变了数据的显示方式,而不是它的存储方式。

    改变数据的存储方式;您需要更改文件的本机格式;或按您想要的方式格式化数据。

    在您的情况下,您将其转换为字符串,您应该将其转换为 零填充字符串;有一个特殊的函数叫做str.zfill()

    您的问题的第二部分要简单得多 - 在 pandas 0.23.0 版中添加了 read_excelnrows 参数

    【讨论】:

    • 谢谢,我会接受你的回答,但@gerardo 提前 2 分钟给了它~不过还是很感激!
    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2018-01-19
    • 2023-03-11
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多