Pandas - 格式化数据框行不起作用
Posted
技术标签:
【中文标题】Pandas - 格式化数据框行不起作用【英文标题】:Pandas - Formatting dataframe rows not working 【发布时间】:2018-11-18 03:02:40 【问题描述】:我正在尝试格式化我的数据框的行,但没有成功。
我的数据框输出是:
X Y
443 cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9 889.825
111 ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa 883.275
221 601f669c760687b84ec57fe1eec213e26114a262 868.345
631 80f54ce2aa2839e80cd5447cb369ec31f5e1fd47 867.545
我想要以下格式的输出:
"X": "cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9", "Y": 889.8
"X": "ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa", "Y": 883.2
我试过了:
format = '"X": "", "Y": %.1f'.format
my_df.apply(lambda x: format(**x), 1)
和:
my_df.style.format('X': '"X": "",', 'Y': '"Y": %.1f')
和:
my_df.to_string(formatters='X':'"X": "",'.format, 'Y':'"Y": %.1f'.format)
没有一个对我有用。最后一次尝试 (to_string
) 返回以下错误:
文件“/usr/local/lib/python3.5/dist-packages/pandas/io/formats/format.py”,第 1781 行,在 get_result fmt_values = self._format_strings() 文件“/usr/local/lib/python3.5/dist-packages/pandas/io/formats/format.py”,第 1961 行,在 _format_strings return [self.formatter(x) for x in self.values] 文件“/usr/local/lib/python3.5/dist-packages/pandas/io/formats/format.py”,第 1961 行,在 return [self.formatter(x) for x in self.values] 键错误:'%'
有什么建议/帮助吗?
【问题讨论】:
【参考方案1】:试试
my_df.to_dict(orient='records')
【讨论】:
【参考方案2】:对我来说,使用更改 %
to :
:
df = df.to_string(formatters='X':'"X": "",'.format, 'Y':'"Y": :.1f'.format)
print (df)
X Y
443 "X": "cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9", "Y": 889.8
111 "X": "ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa", "Y": 883.3
221 "X": "601f669c760687b84ec57fe1eec213e26114a262", "Y": 868.3
631 "X": "80f54ce2aa2839e80cd5447cb369ec31f5e1fd47", "Y": 867.5
如果需要新的格式化列,可以使用列表理解:
df['new'] = ['"X": "", "Y": :.1f'.format(i, j) for i, j in zip(df['X'], df['Y'])]
print (df)
X Y \
443 cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9 889.825
111 ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa 883.275
221 601f669c760687b84ec57fe1eec213e26114a262 868.345
631 80f54ce2aa2839e80cd5447cb369ec31f5e1fd47 867.545
new
443 "X": "cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9...
111 "X": "ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa...
221 "X": "601f669c760687b84ec57fe1eec213e26114a262...
631 "X": "80f54ce2aa2839e80cd5447cb369ec31f5e1fd47...
【讨论】:
成功了。但是 X 值被打印为“cd2a9dd781c1396d4000ae05fcc3a ...”,这是不完整的。我该怎么做才能输出完整的字符串? “cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9”而不是“cd2a9dd781c1396d4000ae05fcc3a ...”?谢谢。 @Dalton Cézane 这是显示问题,解决方案是here以上是关于Pandas - 格式化数据框行不起作用的主要内容,如果未能解决你的问题,请参考以下文章