【问题标题】:Python Read fixed width files without any data type interpretation using PandasPython 使用 Pandas 读取固定宽度文件,无需任何数据类型解释
【发布时间】:2017-10-04 07:28:45
【问题描述】:

我正在尝试设置一个 Python 脚本,该脚本将能够读取许多固定宽度的数据文件,然后将它们转换为 csv。为此,我像这样使用pandas

pandas.read_fwf('source.txt', colspecs=column_position_length).\
         to_csv('output.csv', header=column_name, index=False, encoding='utf-8')

其中column_position_lengthcolumn_name 是包含读取和写入数据所需信息的列表。

在这些文件中,我有一长串代表测试答案的数字。例如:333133322122222223133313222222221222111133313333 代表多项选择测试中的正确答案。所以这更像是一个代码而不是一个数值。我遇到的问题是熊猫将这些值解释为浮点数,然后以科学计数法将这些值写入 csv(3.331333221222221e+47)。

我发现了很多关于这个问题的问题,但它们并没有完全解决我的问题。

  1. Solution 1 - 我相信此时值已经转换为浮点数,所以这无济于事。
  2. Solution 2 - 根据 pandas documentationdtype 在 Python 中不支持作为 read_fwf 的参数。
  3. 解决方案 3 使用转换器 - 使用转换器的问题是您需要指定列名或索引以转换为数据类型,但我想将所有列读取为字符串。

第二个选项似乎是作为字符串读取每一列的答案,但不幸的是,read_fwf 不支持它。有什么建议吗?

【问题讨论】:

  • dtype 支持的,是的,将其设置为object 将是最佳解决方案。
  • dtype :类型名称或列的字典 -> 类型,默认无 数据或列的数据类型。例如。 {‘a’: np.float64, ‘b’: np.int32}(引擎=‘python’不支持)。使用 str 或 object 来保留而不是解释 dtype。 pandas.pydata.org/pandas-docs/stable/generated/…

标签: python pandas floating-point scientific-notation fixed-width


【解决方案1】:

所以我想我想出了一个解决方案,但我不知道它为什么会起作用。 Pandas 将这些值解释为浮点数,因为列中有 NaN 值(空白行)。通过将keep_default_na=False 添加到read_fwf() 参数,它解决了这个问题。根据documentation

keep_default_na : bool,默认 True 如果指定了 na_values 并且 keep_default_na 为 False,默认 NaN 值被覆盖, 否则它们会被附加到。

我想我不太明白这是如何解决我的问题的。任何人都可以对此进行澄清吗?

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2013-09-14
    相关资源
    最近更新 更多