python pandas 数据框到 csv 导出格式化文本文件,每列具有唯一格式

python pandas dataframe to csv exporting a formatted text file with unique formats for each column

我在 Win 7 64 位上使用 Python 2.7.7 和 Pandas。 我的输入数据最初是 space 分隔的,右对齐的。 我现在将数据作为 Pandas 数据框导出为 csv。 我想写一个 space 分隔的右对齐文本文件。 这些列有字符串、整数和浮点数。 我尝试使用此格式设置其中一列的格式:

df_fg['Mem']=df_fg['Mem'].map('{:5d}'.format)

这让我可以单独设置每一列的格式,这很棒。

问题是,当我使用这种格式时,我无法输出 space 分隔文件。 以下是我尝试编写文本文件的各种方式:

df_fg.to_csv('t.txt',index = False)

毫不奇怪,这会生成一个用填充 spaces 格式化的 csv 文件。

所以,我认为下一个合乎逻辑的步骤是尝试包含 "sep" 以摆脱逗号。

df_fg.to_csv('t.txt',index = False,sep= ' ') 

这会在文本文件中生成格式化文本,但每列中的每个元素都用双引号引起来。所以我得到一个看起来像

的专栏
"    1"
"    1"

我尝试了 "quoting" 和 "doublequote" 选项的各种组合 .to_csv。什么都不管用。我要么以双引号内的格式化文本结束,要么以 csv 文件内的格式化文本结束。我无法在文本文件中获取格式化文本。

也许,我不应该使用 "map" 和 "format"? 非常感谢任何有关如何从数据帧或 csv 中编写右对齐的 space 分隔字符串、整数和浮点数的建议。

我试图将数据帧写入字符串。我使用以下命令格式化数据框中的每一列 df_g['Mem']=df_g['Mem'].map('{:4d}'.format)

df_g['Date1']=df_g['Date1'].map('{:12s}'.format)

我使用 dataframe to string 命令编写了 dataframe。我希望输出是右对齐的

f2 = open('2.txt','w')
s=df_g.to_string(justify='right',index = False)
f2.write(s) 
f2.close() 

在文本文件中,并非所有列都是右对齐的。 第 1 列包含一个整数,它按预期右对齐 第 5 列包含一个带 2 位小数的浮点数,它按预期右对齐 第 2,3 和 4 列是字符串(我使用下面的命令使它们成为数据帧中的字符串

df_g['Date1']=df_g['Date1'].map('{:12s}'.format)

1,26/04/2015 ,09:19:07 ,更多文字 ,-1600.00,

(我使用逗号只是为了演示字段的结束和开始位置。

所以,我仍然找不到dataframe.to_string输出格式化字符串的方法。最有趣的是,"map format" 实际上会改变字符串的长度(和间距),但“justify='right'”对它们不起作用。

有什么建议吗?

我认为这可能会为您提供所需的信息。首先按照您的建议填充列条目。然后沿轴 1 求和:

s = df_string.sum(axis=1)

这是一个系列,每个条目中都有一个字符串,代表原始 df 中的一行。然后只需在每个元素中添加一个换行符并再次求和:

s = (s + '\n').sum()

然后写你想要的文件就可以了

open('t.txt', 'w').write(s)

这是一个愚蠢而简洁的单行示例:

df = pd.DataFrame({'A': [1.2, 2.34], 'B': ['foo', 'bar', ]})
print (df.applymap(lambda x: '{:>20s}'.format(str(x))).sum(axis=1) + '\n').sum()

             1.2                 foo
            2.34                 bar