python - Pandas 如何使用 read_fwf 读取填充为 0 的数字?

标签 python numpy pandas scipy

我正在使用 read_fwf 来做显而易见的事情,但 pandas 将从我们使用的数字字符串代码中删除左侧填充的零,并将类型视为 int。我们必须使用的各种代码也是如此,它们采用“xxxx.yyy”格式,它将转换为 float 并切掉前导零。

对于代码长度相同但其中许多长度不同(即:0012340001234)的列来说,这不是问题,因此我们无法可靠地 zfill 数据——一旦 pandas 解析掉零,它们就会丢失。

我知道 read_fwf 的 dtype 将在下一次重大更新中推出,但我真的希望现在有一种方法可以防止 pandas 破坏我的数据。有人知道吗?

示例文件(test.fwf):

0001234  000.1234
001234   123.4567
00001234 345.6789
0005678  678.1234
0005678  000.1200
0005678  012.2301
0005678  234.5678

测试fwf.py:

import pandas as pd

df = pd.read_fwf('test.fwf', colspecs=[(0, 8),(9, 19)])
df.columns = ['code_a', 'code_b']

In[2]: from testfwf import df
In[3]: df
Out[3]: 
   code_a    code_b
0    1234  123.4567
1    1234  345.6789
2    5678  678.1234
3    5678    0.1200
4    5678   12.2301
5    5678  234.5678

最佳答案

首先,您丢失了一行数据。设置 header=None 以指定没有 header 。其次,您可以使用转换器来指定列应该是一个字符串并防止剥离前导 0:

In [96]: pd.read_fwf('test.fwf', header=None, converters={0:str, 1:str})
Out[96]: 
          0         1
0   0001234  000.1234
1    001234  123.4567
2  00001234  345.6789
3   0005678  678.1234
4   0005678  000.1200
5   0005678  012.2301
6   0005678  234.5678

关于python - Pandas 如何使用 read_fwf 读取填充为 0 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656462/

相关文章:

python - 具有三个 3x3 内核的 6x6 数组的 2D 互相关

python - 多次拟合回归并收集汇总统计数据

python - MousePressEvent,QGraphicsView中的位置偏移

Python 连接字节数组

python - 将字符串的前 3 个字符与特定列匹配

python - 是否 [ :] slice only make shallow copy of a list?

python - 带有列表列的 pandas 时间序列数据框

python - 拼接 Pandas Dataframe 的优化方法

python - 导入错误 : No module named pydot ( unable to import pydot)

python - 来自 django 基本模板文件中 url 的变量