Panda df не показывает все строки после загрузки из MS SQL

Я использую Панды с последним алхимия (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

Q: Что происходит, и почему я не могу распечатать/показать все строки?

вы можете попробовать pd.set_option('display.max_rows', 10), чтобы увидеть, работает ли он

DataSciRookie 05.05.2022 10:18

@DataSciRookie Я уже пробовал это с 3000.

not2qubit 05.05.2022 10:41

Вы пытались вывести эти строки из своих функций? : pd.set_option('display.max_rows', нет) pd.set_option('display.max_columns', нет)

DataSciRookie 05.05.2022 10:46

Это также странно, почему мы не видим вашу печать (df) из вашей функции, когда вы ее вызываете?

DataSciRookie 05.05.2022 10:58

Я вижу это, но он показывает только первые 292 строки.

not2qubit 05.05.2022 11:00

Вы также пробовали: print("Значение max_rows: " + str(pd.get_option("display.max_rows"))) для проверки

DataSciRookie 05.05.2022 11:06

Может ли это быть ошибкой из-за того, что в проблеме Unicide упоминается здесь и сообщается здесь? PyUnicode_FromUnicode(NULL, size) is deprecated

not2qubit 05.05.2022 11:41

Давайте продолжить обсуждение в чате.

not2qubit 06.05.2022 12:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы отобразить все строки в pandas, вы должны установить для параметра отображения значение «Нет» или 1 дополнительный размер кадра данных, как вы сделали в своем коде:

pd.set_option('display.max_rows', None)
pandas.set_option('display.max_rows', z.shape[0]+1)

Учитывая, что это не проблема, возможно, используемая вами среда IDE или программа автоматически обрезает эту информацию из представления (например, Ipython обрезает каждый большой вывод).

Другая вещь, которую нужно попробовать, - это принудительно распечатать фрейм данных, а не просто возвращаемое значение:

>>> print(z)

Чтобы проверить все, я бы порекомендовал вам передать это в файл csv/excel, чтобы сделать это лучше.

Я использую последнюю версию Ядро Powershell (pwsh) для пользовательского интерфейса, так что это вообще не связано.

not2qubit 05.05.2022 11:43

Но в какой программе вы запускаете свой код? питон напрямую? IPDB? Это, вероятно, тот, который ограничивает ваш вывод для возвращаемого значения z, а не для пользовательского интерфейса.

mrleugim33 05.05.2022 12:17
Ответ принят как подходящий

Проблема заключалась в том, что pandas возвращает фрейм данных упакованный (DF). Таким образом, при печати вы получаете только частичные (в лучшем случае) или сломанные (в худшем) строки из данных.

По какой-то причине это всегда включено по умолчанию, и результаты сильно различаются в зависимости от того, сколько отображаемой строки/данных. Решение состоит в том, чтобы использовать оператор распаковка (*) перед/при попытке распечатать дф, например:

print(*df)

(Это также известно как оператор шлепок для энтузиастов Ruby.)


Справочники и учебные пособия:

Другие вопросы по теме