python pandas dataframe to csv导出格式化的文本文件,每个列都有唯一的格式

时间:2015-05-22 14:18:03

标签: python pandas export-to-csv delimited-text

我在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输出格式化字符串的方法。最有趣的是,"地图格式"事实上,它确实改变了弦的长度(和间距),但是"证明='右' "对他们不起作用。

有什么建议吗?

1 个答案:

答案 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)