当前位置: 首页 > 知识库问答 >
问题:

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

万俟飞语
2023-03-14

我试图建立一个Python脚本,它将能够读取许多固定宽度的数据文件,然后将它们转换为csv。要做到这一点,我使用的熊猫是这样的:

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

其中column\u position\u lengthcolumn\u name是包含读写数据所需信息的列表。

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

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

  1. 解决方案1-我相信在这一点上,值已经被转换为浮点数,所以这不会有帮助。
  2. 解决方案2-根据熊猫留档, dtype在Python中不支持作为 read_fwf的参数。
  3. 解决方案3使用转换器-使用转换器的问题是,您需要指定要转换为数据类型的列名或索引,但我想将所有列读取为字符串

第二个选项似乎是将中的每一列作为字符串读取的首选选项,但不幸的是,read\u fwf不支持它。有什么建议吗?

共有1个答案

邰伟彦
2023-03-14

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

keep_default_na: bool,默认True如果指定了na_values,keep_default_na为False,默认NaN值将被重写,否则将被附加到。

我想我不太明白这是如何解决我的问题。有人能澄清一下吗?

 类似资料:
  • 问题内容: 我正在使用该功能将Excel文件导入到熊猫数据框。 列之一是表的主键:它是所有数字,但是存储为文本(Excel单元格左上角的绿色小三角形确认了这一点)。 但是,当我将文件导入pandas数据框时,该列将以浮点形式导入。这意味着,例如“ 0614”变为614。 导入列时是否可以指定数据类型?我知道在导入CSV文件时这是可能的,但找不到的语法。 我能想到的唯一解决方案是在Excel中的文本

  • 问题内容: 我知道熊猫有,但是有类似的东西吗?我正在寻找对字段宽度,数值精度和字符串对齐的支持。似乎没有做到这一点。 可以,但是我不想做: 那似乎是错误的。非常感谢您的想法。 问题答案: 除非有人在熊猫中实现此功能,否则您可以使用制表包:

  • 对于像这样的固定宽度整数类型,是否有一些整数文字的c建议?

  • 问题内容: 如何使用Pandas读取以下(两列)数据(来自.dat文件) 列分隔符(至少)为2个空格。 我试过了 但它打印 问题答案: 您可以将参数usecols与列顺序一起使用: 编辑: 您可以使用分隔符-2个或更多空格,然后添加,因为出现警告: ParserWarning:回退到“ python”引擎,因为“ c”引擎不支持正则表达式分隔符(分隔符> 1个字符且与“ \ s +”不同的分隔符被

  • 问题内容: 我试图找到一种解析文件的方法,该文件包含固定宽度的线。例如,前20个字符代表一列,从21:30开始代表另一列,依此类推。 假设该行包含100个字符,将行解析为多个组件的有效方法是什么? 我可以每行使用字符串切片,但是如果行很大,这会有点难看。还有其他快速方法吗? 问题答案: 由于Python标准库的模块是用C编写的,因此使用它非常容易而且非常快捷。 这是可以用来完成您想要的事情的方法。

  • 问题内容: 我从供应商那里得到了一个文件,每行有115个固定宽度的字段。如何将文件解析为115个字段,以便可以在代码中使用它们? 我首先想到的是只是为了让常数为每场像和使用。这看起来很丑,所以我很好奇这样做的更好方法。谷歌搜索打开的两个图书馆似乎都没有更好的选择。 问题答案: 我将使用像flatworm这样的平面文件解析器,而不是重新发明轮子:它具有简洁的API,易于使用,具有不错的错误处理能力和