- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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/
如何使用 tabulate 包在 python 中合并多个表? append 在 python 中连接两个表时不起作用。这些表是使用 python 中的 tabulate 包实现的。 table_1
我想使用制表法将两个表格并排显示。 我的方法: test_table1 = tabulate([['Alice', 24], ['Bob', 19]]) test_table2 = tabulate(
我之前在大学学习过 Java 的为期 3 个月的短期类(class)(唯一的项目是编写数独游戏)。 我想学习一种对于一般自动化任务来说最流行的编程语言。到目前为止,我已经选择了 AHK,它帮助我完成了
我的脚本有问题.. 用户需要向一个 div 输入数据,当一个 div 已满(4 个字符)时,脚本应自动移动到下一个字段。 在处理输入时,这非常有效: http://jsfiddle.net/4m5fg
我正在使用 MySQL Workbench 来编写一些查询。我想设置 MySQL 编辑器,以便在按 Enter 键换行时在下一行中保持对齐或水平制表。就像编程编辑通常所做的那样,我想你就是我的意思。
我正在尝试:(1) 估计只有因变量发生变化的多个模型 (2) 使用 Stargazer 包将结果制表 以下代码有效,但我必须为每个模型重复一行代码: library(stargazer)
我是一名优秀的程序员,十分优秀!