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
我在 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