Wie erweitere ich die Ausgabeanzeige, um mehr Spalten eines Pandas-DataFrames anzuzeigen?
-
13-12-2019 - |
Frage
Gibt es eine Möglichkeit, die Anzeige der Ausgabe entweder im interaktiven Modus oder im Skriptausführungsmodus zu erweitern?
Konkret verwende ich die describe()
Funktion auf einem Pandas DataFrame
.Wenn das DataFrame
5 Spalten (Beschriftungen) breit ist, erhalte ich die beschreibenden Statistiken, die ich möchte.Wenn jedoch die DataFrame
mehr Spalten hat, werden die Statistiken unterdrückt und etwa Folgendes zurückgegeben:
>> Index: 8 entries, count to max
>> Data columns:
>> x1 8 non-null values
>> x2 8 non-null values
>> x3 8 non-null values
>> x4 8 non-null values
>> x5 8 non-null values
>> x6 8 non-null values
>> x7 8 non-null values
Der Wert „8“ wird unabhängig davon angegeben, ob 6 oder 7 Spalten vorhanden sind.Worauf bezieht sich die „8“?
Ich habe bereits versucht, das IDLE-Fenster größer zu ziehen und die Breitenoptionen für „IDLE konfigurieren“ zu erhöhen, ohne Erfolg.
Mein Zweck bei der Verwendung von Pandas und describe()
besteht darin, die Verwendung eines zweiten Programms wie Stata für grundlegende Datenmanipulationen und -untersuchungen zu vermeiden.
Lösung
Aktualisieren:Pandas 0.23.4 und höher
Dies ist nicht erforderlich. Pandas erkennt die Größe Ihres Terminalfensters automatisch, sofern Sie diese festlegen pd.options.display.width = 0
.(Ältere Versionen siehe unten.)
pandas.set_printoptions(...)
ist veraltet.Verwenden Sie stattdessen pandas.set_option(optname, val)
, oder gleichwertig pd.options.<opt.hierarchical.name> = val
.Wie:
import pandas as pd
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
Hier ist das Hilfe für set_option
:
set_option(pat,value) - Sets the value of the specified option Available options: display.[chop_threshold, colheader_justify, column_space, date_dayfirst, date_yearfirst, encoding, expand_frame_repr, float_format, height, line_width, max_columns, max_colwidth, max_info_columns, max_info_rows, max_rows, max_seq_items, mpl_style, multi_sparse, notebook_repr_html, pprint_nest_depth, precision, width] mode.[sim_interactive, use_inf_as_null] Parameters ---------- pat - str/regexp which should match a single option. Note: partial matches are supported for convenience, but unless you use the full option name (e.g. x.y.z.option_name), your code may break in future versions if new options with similar names are introduced. value - new value of option. Returns ------- None Raises ------ KeyError if no such option exists display.chop_threshold: [default: None] [currently: None] : float or None if set to a float value, all float values smaller then the given threshold will be displayed as exactly 0 by repr and friends. display.colheader_justify: [default: right] [currently: right] : 'left'/'right' Controls the justification of column headers. used by DataFrameFormatter. display.column_space: [default: 12] [currently: 12]No description available. display.date_dayfirst: [default: False] [currently: False] : boolean When True, prints and parses dates with the day first, eg 20/01/2005 display.date_yearfirst: [default: False] [currently: False] : boolean When True, prints and parses dates with the year first, eg 2005/01/20 display.encoding: [default: UTF-8] [currently: UTF-8] : str/unicode Defaults to the detected encoding of the console. Specifies the encoding to be used for strings returned by to_string, these are generally strings meant to be displayed on the console. display.expand_frame_repr: [default: True] [currently: True] : boolean Whether to print out the full DataFrame repr for wide DataFrames across multiple lines, `max_columns` is still respected, but the output will wrap-around across multiple "pages" if it's width exceeds `display.width`. display.float_format: [default: None] [currently: None] : callable The callable should accept a floating point number and return a string with the desired format of the number. This is used in some places like SeriesFormatter. See core.format.EngFormatter for an example. display.height: [default: 60] [currently: 1000] : int Deprecated. (Deprecated, use `display.height` instead.) display.line_width: [default: 80] [currently: 1000] : int Deprecated. (Deprecated, use `display.width` instead.) display.max_columns: [default: 20] [currently: 500] : int max_rows and max_columns are used in __repr__() methods to decide if to_string() or info() is used to render an object to a string. In case python/IPython is running in a terminal this can be set to 0 and pandas will correctly auto-detect the width the terminal and swap to a smaller format in case all columns would not fit vertically. The IPython notebook, IPython qtconsole, or IDLE do not run in a terminal and hence it is not possible to do correct auto-detection. 'None' value means unlimited. display.max_colwidth: [default: 50] [currently: 50] : int The maximum width in characters of a column in the repr of a pandas data structure. When the column overflows, a "..." placeholder is embedded in the output. display.max_info_columns: [default: 100] [currently: 100] : int max_info_columns is used in DataFrame.info method to decide if per column information will be printed. display.max_info_rows: [default: 1690785] [currently: 1690785] : int or None max_info_rows is the maximum number of rows for which a frame will perform a null check on its columns when repr'ing To a console. The default is 1,000,000 rows. So, if a DataFrame has more 1,000,000 rows there will be no null check performed on the columns and thus the representation will take much less time to display in an interactive session. A value of None means always perform a null check when repr'ing. display.max_rows: [default: 60] [currently: 500] : int This sets the maximum number of rows pandas should output when printing out various output. For example, this value determines whether the repr() for a dataframe prints out fully or just a summary repr. 'None' value means unlimited. display.max_seq_items: [default: None] [currently: None] : int or None when pretty-printing a long sequence, no more then `max_seq_items` will be printed. If items are ommitted, they will be denoted by the addition of "..." to the resulting string. If set to None, the number of items to be printed is unlimited. display.mpl_style: [default: None] [currently: None] : bool Setting this to 'default' will modify the rcParams used by matplotlib to give plots a more pleasing visual style by default. Setting this to None/False restores the values to their initial value. display.multi_sparse: [default: True] [currently: True] : boolean "sparsify" MultiIndex display (don't display repeated elements in outer levels within groups) display.notebook_repr_html: [default: True] [currently: True] : boolean When True, IPython notebook will use html representation for pandas objects (if it is available). display.pprint_nest_depth: [default: 3] [currently: 3] : int Controls the number of nested levels to process when pretty-printing display.precision: [default: 7] [currently: 7] : int Floating point output precision (number of significant digits). This is only a suggestion display.width: [default: 80] [currently: 1000] : int Width of the display in characters. In case python/IPython is running in a terminal this can be set to None and pandas will correctly auto-detect the width. Note that the IPython notebook, IPython qtconsole, or IDLE do not run in a terminal and hence it is not possible to correctly detect the width. mode.sim_interactive: [default: False] [currently: False] : boolean Whether to simulate interactive mode for purposes of testing mode.use_inf_as_null: [default: False] [currently: False] : boolean True means treat None, NaN, INF, -INF as null (old way), False means None and NaN are null, but INF, -INF are not null (new way). Call def: pd.set_option(self, *args, **kwds)
BEARBEITEN:Informationen zu älteren Versionen, vieles davon ist veraltet.
Als @bmu erwähnt, Pandas erkennt (standardmäßig) automatisch die Größe des Anzeigebereichs. Eine Zusammenfassungsansicht wird verwendet, wenn eine Objektdarstellung nicht auf die Anzeige passt.Sie haben erwähnt, dass die Größenänderung des IDLE-Fensters keine Auswirkung hatte.Wenn Sie tun print df.describe().to_string()
Passt es auf das IDLE-Fenster?
Die Terminalgröße wird bestimmt durch pandas.util.terminal.get_terminal_size()
(veraltet und entfernt), dies gibt ein Tupel zurück, das das enthält (width, height)
des Displays.Entspricht die Ausgabe der Größe Ihres IDLE-Fensters?Möglicherweise liegt ein Problem vor (es gab bereits eines beim Ausführen eines Terminals in Emacs).
Beachten Sie, dass es möglich ist, die automatische Erkennung zu umgehen. pandas.set_printoptions(max_rows=200, max_columns=10)
wechselt nie zur Zusammenfassungsansicht, wenn die Anzahl der Zeilen und Spalten die angegebenen Grenzwerte nicht überschreitet.
Die Option „max_colwidth“ hilft dabei, die ungekürzte Form jeder Spalte anzuzeigen.
Andere Tipps
Versuche dies:
pd.set_option('display.expand_frame_repr', False)
Aus der Dokumentation:
display.expand_frame_repr:Boolescher Wert
Ob die vollständige DataFrame-Darstellung für breite DataFrames über mehrere Zeilen ausgedruckt werden soll, max_columns wird weiterhin berücksichtigt, aber die Ausgabe wird über mehrere „Seiten“ umbrochen, wenn ihre Breite display.width überschreitet.[Standard:Stimmt] [aktuell:WAHR]
Sehen: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html
Wenn Sie Optionen vorübergehend festlegen möchten, um einen großen DataFrame anzuzeigen, können Sie Folgendes verwenden option_context:
with pd.option_context('display.max_rows', -1, 'display.max_columns', 5):
print df
Optionswerte werden beim Beenden automatisch wiederhergestellt with
Block.
Bei mir hat nur die Verwendung dieser 3 Zeilen funktioniert:
pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('max_colwidth', -1)
Anaconda / Python 3.6.5 / Pandas:0.23.0 / Visual Studio Code 1.26
Legen Sie die maximale Spaltenbreite fest, indem Sie Folgendes verwenden:
pd.set_option('max_colwidth', 800)
Diese spezielle Anweisung legt die maximale Breite pro Spalte auf 800 Pixel fest.
Sie können die Pandas-Druckoptionen mit anpassen set_printoptions
.
In [3]: df.describe()
Out[3]:
<class 'pandas.core.frame.DataFrame'>
Index: 8 entries, count to max
Data columns:
x1 8 non-null values
x2 8 non-null values
x3 8 non-null values
x4 8 non-null values
x5 8 non-null values
x6 8 non-null values
x7 8 non-null values
dtypes: float64(7)
In [4]: pd.set_printoptions(precision=2)
In [5]: df.describe()
Out[5]:
x1 x2 x3 x4 x5 x6 x7
count 8.0 8.0 8.0 8.0 8.0 8.0 8.0
mean 69024.5 69025.5 69026.5 69027.5 69028.5 69029.5 69030.5
std 17.1 17.1 17.1 17.1 17.1 17.1 17.1
min 69000.0 69001.0 69002.0 69003.0 69004.0 69005.0 69006.0
25% 69012.2 69013.2 69014.2 69015.2 69016.2 69017.2 69018.2
50% 69024.5 69025.5 69026.5 69027.5 69028.5 69029.5 69030.5
75% 69036.8 69037.8 69038.8 69039.8 69040.8 69041.8 69042.8
max 69049.0 69050.0 69051.0 69052.0 69053.0 69054.0 69055.0
Dies funktioniert jedoch nicht in allen Fällen, da Pandas Ihre Konsolenbreite erkennt und nur verwendet to_string
ob die Ausgabe in die Konsole passt (siehe Dokumentzeichenfolge von set_printoptions
).In diesem Fall können Sie explizit aufrufen to_string
wie beantwortet von BrenBarn.
Aktualisieren
Mit Version 0.10 werden breite Datenrahmen gedruckt geändert:
In [3]: df.describe()
Out[3]:
x1 x2 x3 x4 x5 \
count 8.000000 8.000000 8.000000 8.000000 8.000000
mean 59832.361578 27356.711336 49317.281222 51214.837838 51254.839690
std 22600.723536 26867.192716 28071.737509 21012.422793 33831.515761
min 31906.695474 1648.359160 56.378115 16278.322271 43.745574
25% 45264.625201 12799.540572 41429.628749 40374.273582 29789.643875
50% 56340.214856 18666.456293 51995.661512 54894.562656 47667.684422
75% 75587.003417 31375.610322 61069.190523 67811.893435 76014.884048
max 98136.474782 84544.484627 91743.983895 75154.587156 99012.695717
x6 x7
count 8.000000 8.000000
mean 41863.000717 33950.235126
std 38709.468281 29075.745673
min 3590.990740 1833.464154
25% 15145.759625 6879.523949
50% 22139.243042 33706.029946
75% 72038.983496 51449.893980
max 98601.190488 83309.051963
Darüber hinaus hat sich die API zum Festlegen von Pandas-Optionen geändert:
In [4]: pd.set_option('display.precision', 2)
In [5]: df.describe()
Out[5]:
x1 x2 x3 x4 x5 x6 x7
count 8.0 8.0 8.0 8.0 8.0 8.0 8.0
mean 59832.4 27356.7 49317.3 51214.8 51254.8 41863.0 33950.2
std 22600.7 26867.2 28071.7 21012.4 33831.5 38709.5 29075.7
min 31906.7 1648.4 56.4 16278.3 43.7 3591.0 1833.5
25% 45264.6 12799.5 41429.6 40374.3 29789.6 15145.8 6879.5
50% 56340.2 18666.5 51995.7 54894.6 47667.7 22139.2 33706.0
75% 75587.0 31375.6 61069.2 67811.9 76014.9 72039.0 51449.9
max 98136.5 84544.5 91744.0 75154.6 99012.7 98601.2 83309.1
Sie können verwenden print df.describe().to_string()
um zu erzwingen, dass die gesamte Tabelle angezeigt wird.(Sie können verwenden to_string()
so für jeden DataFrame.Das Ergebnis von describe
ist nur ein DataFrame selbst.)
Die 8 ist die Anzahl der Zeilen im DataFrame, die die „Beschreibung“ enthalten (weil describe
berechnet 8 Statistiken, Min., Max., Mittelwert usw.).
Sie können die Ausgabeanzeige so einstellen, dass sie Ihrer aktuellen Terminalbreite entspricht:
pd.set_option('display.width', pd.util.terminal.get_terminal_size()[0])
Entsprechend der Dokumente für v0.18.0, wenn Sie auf einem Terminal arbeiten (also nicht auf einem iPython-Notebook, qtconsole oder IDLE), ist es ein 2-Zeiler, damit Pandas Ihre Bildschirmbreite automatisch erkennt und sich im Handumdrehen an die Anzahl der angezeigten Spalten anpasst:
pd.set_option('display.large_repr', 'truncate')
pd.set_option('display.max_columns', 0)
Es scheint, als ob alle oben genannten Antworten das Problem lösen.Noch ein Punkt:anstatt pd.set_option('option_name')
, können Sie die (automatische Vervollständigung) verwenden
pd.options.display.width = None
Sehen Pandas-Dokument:Optionen und Einstellungen:
Optionen haben einen vollständigen Namen im „gepunkteten Stil“, bei dem die Groß- und Kleinschreibung nicht beachtet wird (z. B.
display.max_rows
).Sie können Optionen direkt als Attribute der obersten Ebene abrufen/festlegenoptions
Attribut:In [1]: import pandas as pd In [2]: pd.options.display.max_rows Out[2]: 15 In [3]: pd.options.display.max_rows = 999 In [4]: pd.options.display.max_rows Out[4]: 999
[...]
für die max_...
Parameter:
max_rows
Undmax_columns
werden in verwendet__repr__()
Methoden, um zu entscheiden, obto_string()
oderinfo()
wird verwendet, um ein Objekt in eine Zeichenfolge zu rendern.Falls Python/IPython in einem Terminal ausgeführt wird, kann dies auf 0 gesetzt werden und Pandas erkennt die Breite des Terminals automatisch korrekt und wechselt zu einem kleineren Format, falls nicht alle Spalten vertikal passen würden.Das IPython-Notebook, IPython qtconsole oder IDLE werden nicht in einem Terminal ausgeführt und daher ist es nicht möglich, eine korrekte automatische Erkennung durchzuführen. ‘None
’ Wert bedeutet unbegrenzt. [Hervorhebung nicht im Original]
für die width
Parameter:
Breite der Anzeige in Zeichen.Falls Python/IPython in einem Terminal ausgeführt wird, kann dies auf eingestellt werden
None
und Pandas erkennen die Breite automatisch korrekt.Beachten Sie, dass IPython Notebook, IPython qtconsole oder IDLE nicht in einem Terminal ausgeführt werden und es daher nicht möglich ist, die Breite korrekt zu erkennen.
import pandas as pd
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 1000)
SentenceA = "William likes Piano and Piano likes William"
SentenceB = "Sara likes Guitar"
SentenceC = "Mamoosh likes Piano"
SentenceD = "William is a CS Student"
SentenceE = "Sara is kind"
SentenceF = "Mamoosh is kind"
bowA = SentenceA.split(" ")
bowB = SentenceB.split(" ")
bowC = SentenceC.split(" ")
bowD = SentenceD.split(" ")
bowE = SentenceE.split(" ")
bowF = SentenceF.split(" ")
# Creating a set consisted of all words
wordSet = set(bowA).union(set(bowB)).union(set(bowC)).union(set(bowD)).union(set(bowE)).union(set(bowF))
print("Set of all words is: ", wordSet)
# Initiating dictionary with 0 value for all BOWs
wordDictA = dict.fromkeys(wordSet, 0)
wordDictB = dict.fromkeys(wordSet, 0)
wordDictC = dict.fromkeys(wordSet, 0)
wordDictD = dict.fromkeys(wordSet, 0)
wordDictE = dict.fromkeys(wordSet, 0)
wordDictF = dict.fromkeys(wordSet, 0)
for word in bowA:
wordDictA[word] += 1
for word in bowB:
wordDictB[word] += 1
for word in bowC:
wordDictC[word] += 1
for word in bowD:
wordDictD[word] += 1
for word in bowE:
wordDictE[word] += 1
for word in bowF:
wordDictF[word] += 1
# Printing Term frequency
print("SentenceA TF: ", wordDictA)
print("SentenceB TF: ", wordDictB)
print("SentenceC TF: ", wordDictC)
print("SentenceD TF: ", wordDictD)
print("SentenceE TF: ", wordDictE)
print("SentenceF TF: ", wordDictF)
print(pd.DataFrame([wordDictA, wordDictB, wordDictB, wordDictC, wordDictD, wordDictE, wordDictF]))
Ausgabe:
CS Guitar Mamoosh Piano Sara Student William a and is kind likes
0 0 0 0 2 0 0 2 0 1 0 0 2
1 0 1 0 0 1 0 0 0 0 0 0 1
2 0 1 0 0 1 0 0 0 0 0 0 1
3 0 0 1 1 0 0 0 0 0 0 0 1
4 1 0 0 0 0 1 1 1 0 1 0 0
5 0 0 0 0 1 0 0 0 0 1 1 0
6 0 0 1 0 0 0 0 0 0 1 1 0
Ich habe diese Einstellungen verwendet, wenn der Datenumfang hoch ist.
# environment settings:
pd.set_option('display.max_column',None)
pd.set_option('display.max_rows',None)
pd.set_option('display.max_seq_items',None)
pd.set_option('display.max_colwidth', 500)
pd.set_option('expand_frame_repr', True)
Sie können auf die Dokumentation verweisenHier
Wenn Sie sich nicht mit Ihren Anzeigeoptionen herumschlagen möchten und nur diese eine bestimmte Spaltenliste sehen möchten, ohne jeden angezeigten Datenrahmen zu erweitern, können Sie Folgendes versuchen:
df.columns.values
Sie können es auch in einer Schleife versuchen:
for col in df.columns:
print(col)
Die folgende Zeile reicht aus, um alle Spalten aus dem Datenrahmen anzuzeigen. pd.set_option('display.max_columns', None)
Sie können einfach die folgenden Schritte ausführen:
Sie können die Optionen für die Pandas-Funktion max_columns wie folgt ändern
import pandas as pd pd.options.display.max_columns = 10
(Dadurch können 10 Spalten angezeigt werden. Sie können dies nach Bedarf ändern.)
Auf diese Weise können Sie die Anzahl der anzuzeigenden Zeilen wie folgt ändern (falls Sie auch die maximale Zeilenanzahl ändern müssen):
pd.options.display.max_rows = 999
(Dadurch können 999 Zeilen gleichzeitig gedruckt werden.)
Bitte beziehen Sie sich auf die Dok um verschiedene Optionen/Einstellungen für Pandas zu ändern