1

我试图设置一个Python脚本,它能够读取许多固定宽度的数据文件,然后将它们转换为csv。要做到这一点,我使用pandas这样的:Python使用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 - 根据大熊猫documentationdtype不支持在Python中作为read_fwf的参数。
  3. 解决方案3使用转换器 - 使用转换器的问题是您需要指定要转换为数据类型的列名称或索引,但是我想将所有列读作字符串。

第二个选项看起来像是以字符串的形式读取每一列的答案,但不幸的是它不支持read_fwf。有什么建议么?

+2

'dtype' _is_支持,是的,将其设置为'object'将是最佳解决方案。 – DyZ

+0

dtype:列的类型名称或字典 - >类型,默认无 数据或列的数据类型。例如。 {'a':np.float64,'b':np.int32}(不支持engine ='python')。使用str或对象来保存并不解释dtype。 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_fwf.html – dselgo

回答

1

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

keep_default_na:BOOL,默认值是true如果指定na_values和 keep_default_na是假的默认NaN值将被覆盖,否则 他们追加到。

我想我不太清楚这是如何解决我的问题。任何人都可以添加任何清晰的这个?

相关问题