需求
在jupyter中可以直接使用用dataframe的名字输出美观的表格形式,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import QUANTAXIS as QA
""" 通过本地数据库获取股票日线数据: QA.QA_fetch_stock_day_adv( code, start='all', end=None, if_drop_index=True, collections=Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'quantaxis'), 'stock_day'), ) """
data=QA.QA_fetch_stock_day_adv(["002003",'300999','603899'],'2021-05-12','2021-05-13') df = data.data df
|
|
|
open
|
high
|
low
|
close
|
volume
|
amount
|
date
|
code
|
|
|
|
|
|
|
2021-05-12
|
002003
|
7.32
|
7.51
|
7.28
|
7.48
|
80536.0
|
5.980900e+07
|
300999
|
76.12
|
76.75
|
75.11
|
76.20
|
146625.0
|
1.114936e+09
|
603899
|
86.80
|
87.85
|
85.71
|
86.60
|
19172.0
|
1.656046e+08
|
2021-05-13
|
002003
|
7.44
|
7.63
|
7.34
|
7.55
|
98429.0
|
7.403393e+07
|
300999
|
75.00
|
75.60
|
74.04
|
74.20
|
144742.0
|
1.080974e+09
|
603899
|
85.71
|
88.12
|
85.10
|
87.59
|
14734.0
|
1.280291e+08
|
在使用print
输出时的结果是这样的。
open high low close volume amount
date code
2021-05-12 002003 7.32 7.51 7.28 7.48 80536.0 5.980900e+07
300999 76.12 76.75 75.11 76.20 146625.0 1.114936e+09
603899 86.80 87.85 85.71 86.60 19172.0 1.656046e+08
2021-05-13 002003 7.44 7.63 7.34 7.55 98429.0 7.403393e+07
300999 75.00 75.60 74.04 74.20 144742.0 1.080974e+09
603899 85.71 88.12 85.10 87.59 14734.0 1.280291e+08
而当DataFrame中存在中英文混合的时候,会出现print()打印无法对齐的情况,导致输出的结果都没有对齐,十分不美观。如:
1 2 3
| df1 = df df1.columns = ["开盘价", "最高价", "最低价", "收盘价", "成交量", "成交金额"] print(df1)
|
开盘价 最高价 最低价 收盘价 成交量 成交金额
date code
2021-05-12 002003 7.32 7.51 7.28 7.48 80536.0 5.980900e+07
300999 76.12 76.75 75.11 76.20 146625.0 1.114936e+09
603899 86.80 87.85 85.71 86.60 19172.0 1.656046e+08
2021-05-13 002003 7.44 7.63 7.34 7.55 98429.0 7.403393e+07
300999 75.00 75.60 74.04 74.20 144742.0 1.080974e+09
603899 85.71 88.12 85.10 87.59 14734.0 1.280291e+08
那么问题来了。 1. 有没有办法使用print
输出中英文混合的dataframe可以对齐美观? 2. 在执行完整的python代码时(非jupyter),有办法象jupyter中一样输出美观的dataframe表格么?
解决办法
问题1 有没有办法使用print输出中英文混合的dataframe可以对齐美观?
1 2 3 4 5
| import pandas as pd pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) pd.set_option('display.width', 180) print(df1)
|
开盘价 最高价 最低价 收盘价 成交量 成交金额
date code
2021-05-12 002003 7.32 7.51 7.28 7.48 80536.0 5.980900e+07
300999 76.12 76.75 75.11 76.20 146625.0 1.114936e+09
603899 86.80 87.85 85.71 86.60 19172.0 1.656046e+08
2021-05-13 002003 7.44 7.63 7.34 7.55 98429.0 7.403393e+07
300999 75.00 75.60 74.04 74.20 144742.0 1.080974e+09
603899 85.71 88.12 85.10 87.59 14734.0 1.280291e+08
问题2 在执行完整的python代码时(非jupyter),有办法象jupyter中一样输出美观的dataframe表格么?
使用IPython.display
来替换print
的输出效果。
1 2 3 4
| from IPython.display import display
display(df) display(df1)
|
|
|
开盘价
|
最高价
|
最低价
|
收盘价
|
成交量
|
成交金额
|
date
|
code
|
|
|
|
|
|
|
2021-05-12
|
002003
|
7.32
|
7.51
|
7.28
|
7.48
|
80536.0
|
5.980900e+07
|
300999
|
76.12
|
76.75
|
75.11
|
76.20
|
146625.0
|
1.114936e+09
|
603899
|
86.80
|
87.85
|
85.71
|
86.60
|
19172.0
|
1.656046e+08
|
2021-05-13
|
002003
|
7.44
|
7.63
|
7.34
|
7.55
|
98429.0
|
7.403393e+07
|
300999
|
75.00
|
75.60
|
74.04
|
74.20
|
144742.0
|
1.080974e+09
|
603899
|
85.71
|
88.12
|
85.10
|
87.59
|
14734.0
|
1.280291e+08
|
|
|
开盘价
|
最高价
|
最低价
|
收盘价
|
成交量
|
成交金额
|
date
|
code
|
|
|
|
|
|
|
2021-05-12
|
002003
|
7.32
|
7.51
|
7.28
|
7.48
|
80536.0
|
5.980900e+07
|
300999
|
76.12
|
76.75
|
75.11
|
76.20
|
146625.0
|
1.114936e+09
|
603899
|
86.80
|
87.85
|
85.71
|
86.60
|
19172.0
|
1.656046e+08
|
2021-05-13
|
002003
|
7.44
|
7.63
|
7.34
|
7.55
|
98429.0
|
7.403393e+07
|
300999
|
75.00
|
75.60
|
74.04
|
74.20
|
144742.0
|
1.080974e+09
|
603899
|
85.71
|
88.12
|
85.10
|
87.59
|
14734.0
|
1.280291e+08
|
问题3 输出dataframe数据时,可以不输出索引号么?
python 2.7
1
| print df.to_string(index=False)
|
python 3
1
| print(df.to_string(index=False))
|