Python 使用 Pandas 读取不带任何数据类型解释的固定宽度文件
Python Read fixed width files without any data type interpretation using Pandas
我正在尝试设置一个 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_length
和 column_name
是包含读取和写入数据所需信息的列表。
在这些文件中,我有一长串数字代表测试答案。例如:333133322122222223133313222222221222111133313333
表示多项选择测试的正确答案。所以这更像是一个代码而不是一个数值。我遇到的问题是 pandas 将这些值解释为浮点数,然后将这些值以科学计数法写入 csv (3.331333221222221e+47)。
我发现了很多关于这个问题的问题,但它们并没有完全解决我的问题。
- Solution 1 - 我相信此时值已经转换为浮点数,所以这无济于事。
- Solution 2 - according to the pandas documentation、
dtype
不支持作为 Python 中 read_fwf
的参数。
- 解决方案 3 使用转换器 - 使用转换器的问题是您需要指定列名或索引以转换为数据类型,但我想将所有列读取为字符串。
第二个选项似乎是将每一列作为字符串读取的答案,但不幸的是 read_fwf
不支持它。有什么建议吗?
所以我想我找到了一个解决方案,但我不知道它为什么有效。 Pandas 将这些值解释为浮点数,因为列中有 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 脚本,它将能够读取许多固定宽度的数据文件,然后将它们转换为 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_length
和 column_name
是包含读取和写入数据所需信息的列表。
在这些文件中,我有一长串数字代表测试答案。例如:333133322122222223133313222222221222111133313333
表示多项选择测试的正确答案。所以这更像是一个代码而不是一个数值。我遇到的问题是 pandas 将这些值解释为浮点数,然后将这些值以科学计数法写入 csv (3.331333221222221e+47)。
我发现了很多关于这个问题的问题,但它们并没有完全解决我的问题。
- Solution 1 - 我相信此时值已经转换为浮点数,所以这无济于事。
- Solution 2 - according to the pandas documentation、
dtype
不支持作为 Python 中read_fwf
的参数。 - 解决方案 3 使用转换器 - 使用转换器的问题是您需要指定列名或索引以转换为数据类型,但我想将所有列读取为字符串。
第二个选项似乎是将每一列作为字符串读取的答案,但不幸的是 read_fwf
不支持它。有什么建议吗?
所以我想我找到了一个解决方案,但我不知道它为什么有效。 Pandas 将这些值解释为浮点数,因为列中有 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.
我想我不太明白这是如何解决我的问题的。任何人都可以对此进行澄清吗?