我在Win 7 64bit上使用Python 2.7.7和Pandas。 我的输入数据最初是以空格分隔的,右对齐的。 我现在把数据作为Pandas数据帧导出为csv。 我想写一个空格分隔的右对齐文本文件。 列包含字符串,整数和浮点数。 我尝试使用以下方法格式化其中一列:
df_fg['Mem']=df_fg['Mem'].map('{:5d}'.format)
这允许我单独格式化每个列,这很棒。
问题是,当我使用这种格式时,我无法输出空格分隔文件。 以下是我尝试编写文本文件的各种方法:
df_fg.to_csv('t.txt',index = False)
毫不奇怪,这会产生一个用填充空格格式化的csv文件。
所以,我认为下一个合乎逻辑的步骤是尝试包括" sep"摆脱逗号。
df_fg.to_csv('t.txt',index = False,sep= ' ')
这会在文本文件中生成格式化文本,但每列中的每个元素都用双引号括起来。所以我得到一个看起来像
的专栏" 1"
" 1"
我试过"引用"的各种组合。和" doublequote"的选择 .to_csv。什么都行不通。我要么在双引号内格式化文本,要么在csv文件中格式化文本。我无法在文本文件中获取格式化文本。
也许,我不应该使用" map"和"格式"? 关于如何从数据帧或csv中编写右对齐空格的字符串,整数和浮点数的任何建议都将非常受欢迎。
我试图将数据帧写入字符串。我使用诸如的命令格式化数据框中的每一列 df_g ['纪念品'] = df_g ['纪念品']映射。(' {:4D}' .format)
df_g['Date1']=df_g['Date1'].map('{:12s}'.format)
我使用dataframe to string命令编写了数据帧。我希望输出是正确的
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,more-text,-1600.00,
(我现在用逗号来演示字段的结束和开始。
所以,我仍然找不到dataframe.to_string输出格式化字符串的方法。最有趣的是,"地图格式"事实上,它确实改变了弦的长度(和间距),但是"证明='右' "对他们不起作用。
有什么建议吗?
答案 0 :(得分:1)
我认为这可能会给你你想要的东西。首先按照您的建议填充列条目。然后沿轴1求和:
s = (s + '\n').sum()
这是一个系列,每个条目中都有一个字符串,表示原始df中的一行。然后只需为每个元素添加换行符并再次求和:
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
这是一个愚蠢的简洁例子:
('a -> 'a)