python将dataframe转换为csv,并为每列导出具有唯一格式的格式化文本文件

python将dataframe转换为csv,并为每列导出具有唯一格式的格式化文本文件,python,pandas,export-to-csv,delimited-text,Python,Pandas,Export To Csv,Delimited Text,我正在使用Python2.7.7,在Win7 64位上使用Pandas。 我的输入数据最初以空格分隔,右对齐。 现在,我将数据导出为csv格式的熊猫数据框。 我想写一个空格分隔的右对齐文本文件。 这些列包含字符串、整数和浮点。 我尝试使用以下方法设置其中一列的格式: df_fg['Mem']=df_fg['Mem'].map('{:5d}'.format) 这使我能够单独设置每一列的格式,这很好 问题是,当我使用这种格式时,我无法输出以空格分隔的文件。 以下是我尝试编写文本文件的各种方法: d

我正在使用Python2.7.7,在Win7 64位上使用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"
我尝试了不同的“引用”和“双引用”选项组合 。到_csv。什么都不管用。我要么以双引号内的格式化文本结束,要么以csv文件内的格式化文本结束。我无法在文本文件中获取格式化文本

也许,我不应该使用“地图”和“格式”? 任何关于如何从数据帧或csv中删除字符串、int和float编写右对齐空格的建议都将不胜感激

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

我使用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列是字符串(我使用下面的命令在dataframe中使它们成为字符串)

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

是否
df.to_字符串(justify='right')
做你想做的事吗?你必须使用filewriter来写行接受StringIO缓冲区,这样你就可以用它来写空格分隔的文件讽刺的是,使用df.string可以很好地处理int和float,但是由于某些原因它不能正确地对齐字符串。似乎最好将数据帧转换为字符串,然后输出一个字符串n出于临时目的未完全清除的文本文件。之后,读入临时文件,可能执行以下操作:from astropy.io import ascii data=ascii.read(table)(并应用格式化程序)
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