Python 使用 Pandas 读取固定宽度文件,无需任何数据类型解释

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

我正在尝试设置一个 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 表示多项选择测试的正确答案。所以这更像是一个代码而不是一个数值。我遇到的问题是 pandas 将这些值解释为 float ,然后以科学计数法将这些值写入 csv (3.331333221222221e+47)。

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

  1. Solution 1 - 我相信此时这些值已经转换为 float ,所以这没有帮助。
  2. Solution 2 - 根据 Pandas documentation ,Python 中不支持将 dtype 作为 read_fwf 的参数。
  3. 解决方案 3 使用转换器 - 使用转换器的问题是您需要指定列名称或索引以转换为数据类型,但我想将所有列作为字符串读取。

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

最佳答案

所以我想我找到了一个解决方案,但我不知道为什么它有效。 Pandas 将这些值解释为 float ,因为列中存在 NaN 值(空行)。通过将 keep_default_na=False 添加到 read_fwf() 参数,解决了这个问题。根据documentation :

keep_default_na : bool, default True If na_values are specified and keep_default_na is False the default NaN values are overridden, otherwise they’re appended to.

我想我不太明白这是如何解决我的问题的。谁能对此澄清一下?

关于Python 使用 Pandas 读取固定宽度文件,无需任何数据类型解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43811317/

相关文章:

python - 用 NaN 替换整数会导致整个列变成 float 据类型

python - 如何使用多处理将多个 Excel 工作表导入 Pandas ?

javascript - 如何确定 Javascript Number 是否在单精度范围内?

java - 为什么 System.out.print(三元运算符) 在输出中打印 float ?

python - 根据斜率向 matplotlib 散点图添加一条线

python - 安装 PySWIP 以在 Python 中使用 Prolog 时出错

python - 如何在 opennmt-py 中将字符串转换为路径

python - 将元组列表转换为深层嵌套列表

c - 将负 double 转换为 C 标准中定义的 unsigned int 的行为吗? ARM 与 x86 上的不同行为

python - DatabaseError : current transaction is aborted, 命令在事务 block 结束之前被忽略?