从 MS SQL 加载后,panda df 未显示所有行
panda df not showing all rows after loading from MS SQL
我正在使用 Pandas 和最新的 sqlalchemy (1.4.36
) 来查询 MS SQL 数据库,使用以下 Python 3.10.3
[Win] 片段:
import pandas as pd #
from sqlalchemy import create_engine, event
from sqlalchemy.engine.url import URL
# ...
def get_table_columns():
SQLA = 'SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE \'pa%\' ORDER BY TABLE_NAME;'
# Use pandas for getting named table & columns
conn_str = set_db_info()
conn_url = URL.create("mssql+pyodbc", query={"odbc_connect": conn_str})
engine = create_engine(conn_url)
df = pd.read_sql(SQLA, engine)
# Permanently changes the pandas settings
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
print(df)
return df
但是,这只会打印前 292 行,而不是全部 2351 行。使用 REPL,我可以通过以下方式检查:
>>> z = get_table_columns()
>>> z
TABLE_NAME COLUMN_NAME
0 paacc accesscd
... # <-- I added these
292 paapepi piapeheadat
>>> z.count()
TABLE_NAME 2351
COLUMN_NAME 2351
dtype: int64
>>> z.shape[0]
2351
>>> z.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2351 entries, 0 to 2350
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 TABLE_NAME 2351 non-null object
1 COLUMN_NAME 2351 non-null object
dtypes: object(2)
memory usage: 36.9+ KB
问:这是怎么回事,为什么我不能 print/show 所有行?
要显示 pandas 中的所有行,您应该将显示选项设置为 None 或从数据帧大小中额外增加 1 个,就像您在代码中所做的那样:
pd.set_option('display.max_rows', None)
pandas.set_option('display.max_rows', z.shape[0]+1)
鉴于这不是问题,可能是您使用的 IDE 或程序自动从视图中裁剪了此信息(例如 Ipython 裁剪了每个大输出)。
要尝试的另一件事是强制打印数据框,而不是仅打印 return 值:
>>> print(z)
要检查所有内容,我建议您将其传递到 csv/excel 文件中以做得更好。
问题是 pandas returns 一个 打包的 数据帧 (DF)。因此,在打印时,您只能从数据中得到部分(最好)或损坏(最坏)的字符串。
出于某种原因,这在默认情况下始终处于打开状态,并且关于显示的 string/data 的数量,结果差异很大。解决方案是使用 unpacking 运算符 (*
) before/when 尝试打印 df ,像这样:
print(*df)
(对于 Ruby 爱好者来说,这也称为 splat 运算符。)
参考和教程:
- https://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them/
- https://www.geeksforgeeks.org/python-star-or-asterisk-operator/
- https://medium.com/understand-the-python/understanding-the-asterisk-of-python-8b9daaa4a558
- https://towardsdatascience.com/unpacking-operators-in-python-306ae44cd480
我正在使用 Pandas 和最新的 sqlalchemy (1.4.36
) 来查询 MS SQL 数据库,使用以下 Python 3.10.3
[Win] 片段:
import pandas as pd #
from sqlalchemy import create_engine, event
from sqlalchemy.engine.url import URL
# ...
def get_table_columns():
SQLA = 'SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE \'pa%\' ORDER BY TABLE_NAME;'
# Use pandas for getting named table & columns
conn_str = set_db_info()
conn_url = URL.create("mssql+pyodbc", query={"odbc_connect": conn_str})
engine = create_engine(conn_url)
df = pd.read_sql(SQLA, engine)
# Permanently changes the pandas settings
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
print(df)
return df
但是,这只会打印前 292 行,而不是全部 2351 行。使用 REPL,我可以通过以下方式检查:
>>> z = get_table_columns()
>>> z
TABLE_NAME COLUMN_NAME
0 paacc accesscd
... # <-- I added these
292 paapepi piapeheadat
>>> z.count()
TABLE_NAME 2351
COLUMN_NAME 2351
dtype: int64
>>> z.shape[0]
2351
>>> z.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2351 entries, 0 to 2350
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 TABLE_NAME 2351 non-null object
1 COLUMN_NAME 2351 non-null object
dtypes: object(2)
memory usage: 36.9+ KB
问:这是怎么回事,为什么我不能 print/show 所有行?
要显示 pandas 中的所有行,您应该将显示选项设置为 None 或从数据帧大小中额外增加 1 个,就像您在代码中所做的那样:
pd.set_option('display.max_rows', None)
pandas.set_option('display.max_rows', z.shape[0]+1)
鉴于这不是问题,可能是您使用的 IDE 或程序自动从视图中裁剪了此信息(例如 Ipython 裁剪了每个大输出)。
要尝试的另一件事是强制打印数据框,而不是仅打印 return 值:
>>> print(z)
要检查所有内容,我建议您将其传递到 csv/excel 文件中以做得更好。
问题是 pandas returns 一个 打包的 数据帧 (DF)。因此,在打印时,您只能从数据中得到部分(最好)或损坏(最坏)的字符串。
出于某种原因,这在默认情况下始终处于打开状态,并且关于显示的 string/data 的数量,结果差异很大。解决方案是使用 unpacking 运算符 (*
) before/when 尝试打印 df ,像这样:
print(*df)
(对于 Ruby 爱好者来说,这也称为 splat 运算符。)
参考和教程:
- https://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them/
- https://www.geeksforgeeks.org/python-star-or-asterisk-operator/
- https://medium.com/understand-the-python/understanding-the-asterisk-of-python-8b9daaa4a558
- https://towardsdatascience.com/unpacking-operators-in-python-306ae44cd480