gpt4 book ai didi

python - 在 pandas-python 中或制表 : how to set FIXED column width?

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:13 25 4
gpt4 key购买 nike

我正在使用 pandas 创建数据帧,然后使用 tabulate 包将它们写入 .txt 文件。但我需要 .txt 表的列恰好 11 个字符宽度(我需要这样做,因为 .txt 稍后由仅读取固定宽度列的 fortran 程序读取)。我在 pandas 或 tabulate 包中找不到用于设置表列宽度的选项。我读到了有关 pandas.set_option('display.max_colwidth',100) 的内容,但这仅设置了最大宽度,而不是固定宽度,并且它用于显示,而不是用于写入到文件中。

有人知道设置宽度的选项吗?或者也许有一个可以制表的替代包,可以实现这一点?

<小时/>

根据 @zipa 的答案中的说明解决方案:

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

看到这里,检查右起第五列:

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 函数采用和 if 子句,并且根据条目是字符串还是 float 而具有不同的行为:

df = df.applymap(lambda x: str(x).ljust(11) if type(x)==str else str('{:.3e}'.format(x)).ljust(11))

这解决了我的问题! - 请参阅下面的输出:

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

最佳答案

嗯,这可能是您所需要的,它会将所有内容转换为 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)

关于python - 在 pandas-python 中或制表 : how to set FIXED column width?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46097855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com