2014-04-10 37 views
0

固定格式的数据文件有时没有明确的小数点,而是依赖格式化字符串将整数解析为浮点数(例如,%4.2f)。 read_fwf中内置了这样的功能吗?也就是说,有一种将1004解析为10.04的简单方法?read_fwf和十进制小数格式

回答

0

当你阅读文件,您可以使用自定义转换器,将在飞行中转换:

def convert_to_decimals(x): 
    return x.format('4%.2f') 

df = pd.read_fwf('myfile', converters={'col_to_convert':convert_to_decimals}) 

所以这里所发生的是,我们正在定义一个转换函数,然后通过传递设置converters PARAM dict其中包含我们想要转换的列作为键和函数名称作为转换函数。

看到online docs

+0

这似乎并没有奏效。例如,'1004'.format('%4.2f')或'1004'.format('4%.2f')返回'1004'。所以当我应用上面的时候,'col_to_convert'有一个dtype的对象而不是浮点数。在另一方面, DEF convert_to_decimals(X): 返回浮子(X)/ 100 DF = pd.read_fwf( 'MYFILE',转换器= { 'col_to_convert':convert_to_decimals}) 品牌确实正确的转换。更有趣的是convert_to_decimals(x,formatstring)函数,它可以更灵活地进行转换。 (对不起格式不佳) –

+0

所以你想要dtype是一个浮点数,试试这个'def convert_to_decimals(x): return float(x [: - 2] +'。'+ x [-2:]) ' – EdChum

+0

@TedTo对于自定义格式化,您必须定义此参数,并在读取文件或读取后读取时将其用作转换器参数 – EdChum