Pandas如何用read_fwf读取0填充数字



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

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

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

示例文件(test.fwf):

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

testfwf.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以指定没有标头。其次,您可以使用转换器指定列应该是字符串,并防止剥离前导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

最新更新