如何修改pandas数据帧的元素长度?

时间:2017-02-28 03:41:58

标签: pandas

我想将pandas dataframe的每个元素更改为指定的长度和十进制数字。长度表示字符数。例如,元素-23.5556 是8个字符长度(包含minuspoint)。我想将它修改为包含2个十进制数字的总共6个字符长度,例如-23.56。如果少于6个字符,请使用space填写。新df的每个元素之间没有分离。

name     x                 y           elev     m1      m2 
136 5210580.00000   5846400.000000  43.3    -28.2   -24.2
246 5373860.00000   5809680.000000  36.19   -25     -22.3
349 5361120.00000   5735330.000000  49.46   -24.7   -21.2
353 5521370.00000   5770740.000000  17.74   -26     -20.5
425 5095630.00000   5528200.000000  58.14   -30.3   -26.1
434 5198630.00000   5570740.000000  73.26   -30.2   -26
442 5373170.00000   5593290.000000  37.17   -22.9   -18.3

请求的每个列格式:

     charactors    decimal digits 
name      3              0
x         14             2
y         14             2
elev       4             1
m1         6             2
m2         6             2

我想要的新df格式:

1365210580.00    5846400.00    43.3-28.2 -24.2
2465373860.00    5809680.00    36.1-25.0 -22.3
3495361120.00    5735330.00    49.4-24.7 -21.2
3535521370.00    5770740.00    17.7-26.0 -20.5
4255095630.00    5528200.00    58.1-30.3 -26.1
4345198630.00    5570740.00    73.2-30.2 -26.0
4425373170.00    5593290.00    37.1-22.9 -18.3

最后,将新的df另存为.dat固定的ascii格式。 哪个工具可以在熊猫中做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用字符串格式

sf = '{name:3.0f}{x:<14.2f}{y:<14.2f}{elev:<4.1f}{m1:<6.1f}{m2:6.1f}'.format
df.apply(lambda r: sf(**r), 1)

0    1365210580.00    5846400.00    43.3-28.2  -24.2
1    2465373860.00    5809680.00    36.2-25.0  -22.3
2    3495361120.00    5735330.00    49.5-24.7  -21.2
3    3535521370.00    5770740.00    17.7-26.0  -20.5
4    4255095630.00    5528200.00    58.1-30.3  -26.1
5    4345198630.00    5570740.00    73.3-30.2  -26.0
6    4425373170.00    5593290.00    37.2-22.9  -18.3

答案 1 :(得分:0)

你需要

df.round(2) 

得到的df

    name    x   y       elev    m1  m2
0   136 5210580 5846400 43.30   -28.2   -24.2
1   246 5373860 5809680 36.19   -25.0   -22.3
2   349 5361120 5735330 49.46   -24.7   -21.2
3   353 5521370 5770740 17.74   -26.0   -20.5
4   425 5095630 5528200 58.14   -30.3   -26.1
5   434 5198630 5570740 73.26   -30.2   -26.0
6   442 5373170 5593290 37.17   -22.9   -18.3