我正在使用read_fwf来做明显的事情,但是pandas会从我们使用的数字字符串代码中删除左边填充的零,并将类型转换为int.对于我们必须使用的“xxxx.yyy”格式的各种代码也是如此,它将转换为float并切断前导零.
这对于代码长度相同的列来说不是问题,但是它们中的许多长度不同(即:001234和0001234),所以我们无法可靠地填充数据 – 一旦pandas将零解析掉它们’迷路了.
我知道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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。