如何解决f字符串多行打印顺序错误
我想用以下python(3.8)代码打印一份报告,但是您可以看到熊猫信息打印在顶部而不是底部。我似乎找不到这种奇怪行为的任何解决方案。有关如何解决此问题的任何想法?
time = 600
file = 'election_file.csv'
report = (
f'Data Diagnostic Report\n'
f'Date & time: {time}\n'
f'Data file: {file}\n'
f'Data frame header (first five lines):\n {election.head()}\n\n'
f'Data frame information:\n {election.info()}\n'
f'end of report\n'
)
print(report)
输出:
time = 600...
<class 'pandas.core.frame.DataFrame'>
Index: 10 entries,Adams to Butler
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Obama 10 non-null float64
1 Romney 10 non-null float64
2 margin 10 non-null float64
3 state 10 non-null object
4 total 10 non-null int64
5 turnout 10 non-null float64
6 Voters 10 non-null int64
7 winner 9 non-null object
dtypes: float64(4),int64(2),object(2)
memory usage: 720.0+ bytes
Data Diagnostic Report
Date & time: 600
Data file: election_file.csv
Data frame header (first five lines):
Obama Romney margin state total turnout Voters \
Adams 35.482334 63.112001 27.629667 PA 41973 68.632677 61156
Allegheny 56.640219 42.185820 14.454399 PA 614671 66.497575 924351
Armstrong 30.696985 67.901278 37.204293 PA 28322 67.198140 42147
Beaver 46.032619 52.637630 6.605012 PA 80015 69.483401 115157
bedford 22.057452 76.986570 54.929118 PA 21444 66.619031 32189
winner
Adams Romney
Allegheny Obama
Armstrong Romney
Beaver Romney
bedford Romney
Data frame information:
None
end of report
解决方法
这是因为dataframe.info()
在调用时会打印。因此,首先您会看到对dataframe.info()
的调用结果(在这种情况下为输出),然后才打印f字符串。
换句话说,解释器首先评估f字符串中使用的所有“变量”,然后才打印格式化的字符串本身。那也是你看到的原因
Data frame information:
None
在输出中。 info()
打印数据,然后返回None
(非常类似于内置的print
)。
这种行为很容易重现:
def foo():
print('foo')
print(f'Generated string {foo()}')
此输出
foo
Generated string None
,
解决此问题的一种方法是将报告分为两部分:
foreach($row as $data) {
$arr[] = [
$data['data_id'],$TheData[$data['data_key']]['English']
// ^
// |__ This is on line 17
];
}
echo json_encode($arr);
,
这是因为df.info()会在调用时立即打印,而不会返回任何内容。 试试这个,应该解决:
import io
buf = io.StringIO()
election.info(buf=buf)
electioninfo = buf.getvalue()
report = (
f'Data Diagnostic Report\n'
f'Date & time: {time}\n'
f'Data file: {file}\n'
f'Data frame header (first five lines):\n {election.head()}\n\n'
f'Data frame information {electioninfo}:\n '
)
print(report)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。