在pandapsython或tablate中:如何设置固定列宽?

2024-09-30 16:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我把熊猫写进txt文件包里。但是我需要.txt表中的列具有精确的11个字符的宽度(我需要这样做,因为.txt稍后由只读取固定宽度列的fortran程序读取)。我在pandas或tablete包中找不到设置表列宽度的选项。我读过pandas.set_option('display.max_colwidth',100),但这只设置了一个最大宽度,而不是一个固定宽度,它是为了显示,而不是为了将写入文件。在

有人知道设置宽度的选项吗?或者是另一个表格包,这样就可以了?在


根据@zipa的回答中的说明进行解决:

现在的输出确实是在宽度=11个字符的列中,但是在右边的第5列中,可以看到这被打乱了,因为float<;10e+11以十进制表示,而不是以指数/科学表示。这是由str(x)引起的

如图所示,从右数第5列:

C_2_       ,nan        ,nan        ,nan        ,nan        , C         , C         ,nan        ,nan        ,nan        ,2.49e-08   ,0.0        ,71600      ,2          ,100        ,6.01e+11   ,-1.0       ,71600      ,2          ,100        
CH         ,nan        ,nan        ,nan        ,nan        , C         , H         ,nan        ,nan        ,nan        ,3.16e-10   ,0.0        ,33700      ,2          ,100        ,7630000000.0,-1.0       ,33700      ,2          ,100        
CN         ,nan        ,nan        ,nan        ,nan        , C         , N         ,nan        ,nan        ,nan        ,1e-09      ,0.0        ,71000      ,2          ,100        ,24200000000.0,0.0        ,71000      ,2          ,100        
CO         ,nan        ,nan        ,nan        ,nan        , C         , O         ,nan        ,nan        ,nan        ,0.000152   ,-3.1       ,12900      ,2          ,100        ,3.67e+15   ,-4.1       ,12900      ,2          ,100 

为了解决这个问题,我把“nan”变成了一个愚蠢的空间: df.fillna(' ',inplace=True)。接下来,我跟随@zipa后面的注释,修改了他建议的代码中的一行-我让lambda函数接受and if子句,并根据条目是string还是float有不同的行为:

^{pr2}$

这解决了我的问题!-见以下输出:

C2         ,           ,           ,           ,           , C         , C         ,           ,           ,           ,2.490e-08  ,0.000e+00  ,7.160e+04  ,2.000e+00  ,1.000e+02  ,6.010e+11  ,-1.000e+00 ,7.160e+04  ,2.000e+00  ,1.000e+02  
CH         ,           ,           ,           ,           , C         , H         ,           ,           ,           ,3.160e-10  ,0.000e+00  ,3.370e+04  ,2.000e+00  ,1.000e+02  ,7.630e+09  ,-1.000e+00 ,3.370e+04  ,2.000e+00  ,1.000e+02  
CN         ,           ,           ,           ,           , C         , N         ,           ,           ,           ,1.000e-09  ,0.000e+00  ,7.100e+04  ,2.000e+00  ,1.000e+02  ,2.420e+10  ,0.000e+00  ,7.100e+04  ,2.000e+00  ,1.000e+02  
CO         ,           ,           ,           ,           , C         , O         ,           ,           ,           ,1.520e-04  ,-3.100e+00 ,1.290e+04  ,2.000e+00  ,1.000e+02  ,3.670e+15  ,-4.100e+00 ,1.290e+04  ,2.000e+00  ,1.000e+02  

Tags: 文件程序txtpandas宽度选项nanch
1条回答
网友
1楼 · 发布于 2024-09-30 16:27:20

好吧,这是你需要的吗,它可以把所有的东西都变成11个字符长的文本:

import pandas as pd

df = pd.DataFrame({'a': [12345, 2, 3], 'b': list('ABC')})
df = df.applymap(lambda x: str(x).ljust(11))
df.columns = df.columns.map(lambda x: str(x).ljust(11))
df.to_csv('somefile.txt', index=False)

相关问题 更多 >