python将dataframe转换为csv,并为每列导出具有唯一格式的格式化文本文件
我正在使用Python2.7.7,在Win7 64位上使用Pandas。 我的输入数据最初以空格分隔,右对齐。 现在,我将数据导出为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
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