Я использую Панды с последним алхимия (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: Что происходит, и почему я не могу распечатать/показать все строки?
@DataSciRookie Я уже пробовал это с 3000.
Вы пытались вывести эти строки из своих функций? : pd.set_option('display.max_rows', нет) pd.set_option('display.max_columns', нет)
Это также странно, почему мы не видим вашу печать (df) из вашей функции, когда вы ее вызываете?
Я вижу это, но он показывает только первые 292 строки.
Вы также пробовали: print("Значение max_rows: " + str(pd.get_option("display.max_rows"))) для проверки
Может ли это быть ошибкой из-за того, что в проблеме Unicide упоминается здесь и сообщается здесь? PyUnicode_FromUnicode(NULL, size) is deprecated
Давайте продолжить обсуждение в чате.
Чтобы отобразить все строки в 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) для пользовательского интерфейса, так что это вообще не связано.
Но в какой программе вы запускаете свой код? питон напрямую? IPDB? Это, вероятно, тот, который ограничивает ваш вывод для возвращаемого значения z, а не для пользовательского интерфейса.
Проблема заключалась в том, что pandas возвращает фрейм данных упакованный (DF). Таким образом, при печати вы получаете только частичные (в лучшем случае) или сломанные (в худшем) строки из данных.
По какой-то причине это всегда включено по умолчанию, и результаты сильно различаются в зависимости от того, сколько отображаемой строки/данных. Решение состоит в том, чтобы использовать оператор распаковка (*
) перед/при попытке распечатать дф, например:
print(*df)
(Это также известно как оператор шлепок для энтузиастов Ruby.)
Справочники и учебные пособия:
вы можете попробовать pd.set_option('display.max_rows', 10), чтобы увидеть, работает ли он