python - bar - pandas xticks




Auswählen von Spalten in einem Pandas-Datenrahmen (6)

Ich habe Daten in verschiedenen Spalten, aber ich weiß nicht, wie man es extrahiert, um es in einer anderen Variablen zu speichern.

index  a   b   c
1      2   3   4
2      3   4   5

Wie wähle ich 'b' , 'c' und speichere es in df1?

Ich habe es versucht

df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']

Keiner scheint zu funktionieren.


Ab Version 0.11.0 können Spalten in der Weise geschnitten werden, wie Sie es mit dem .loc Indexer versucht .loc :

df.loc[:, 'C':'E']

gibt die Spalten C bis E .

Eine Demo auf einem zufällig generierten DataFrame:

import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)), 
                  columns=list('ABCDEF'), 
                  index=['R{}'.format(i) for i in range(100)])
df.head()

Out: 
     A   B   C   D   E   F
R0  99  78  61  16  73   8
R1  62  27  30  80   7  76
R2  15  53  80  27  44  77
R3  75  65  47  30  84  86
R4  18   9  41  62   1  82

Um die Spalten von C bis E zu erhalten (beachten Sie, dass im Gegensatz zu ganzzahligem Slicing 'E' in den Spalten enthalten ist):

df.loc[:, 'C':'E']

Out: 
      C   D   E
R0   61  16  73
R1   30  80   7
R2   80  27  44
R3   47  30  84
R4   41  62   1
R5    5  58   0
...

Dieselbe Funktion zum Auswählen von Zeilen basierend auf Labels. Holen Sie die Zeilen "R6" von diesen Spalten auf "R10":

df.loc['R6':'R10', 'C':'E']

Out: 
      C   D   E
R6   51  27  31
R7   83  19  18
R8   11  67  65
R9   78  27  29
R10   7  16  94

.loc akzeptiert auch ein boolesches Array, so dass Sie die Spalten auswählen können, deren entsprechender Eintrag im Array True . Beispielsweise gibt df.columns.isin(list('BCD')) array([False, True, True, True, False, False], dtype=bool) - Wahr, wenn der Spaltenname in der Liste ['B', 'C', 'D'] ; Falsch, sonst.

df.loc[:, df.columns.isin(list('BCD'))]

Out: 
      B   C   D
R0   78  61  16
R1   27  30  80
R2   53  80  27
R3   65  47  30
R4    9  41  62
R5   78   5  58
...

Angenommen, Ihre Spaltennamen ( df.columns ) sind ['index','a','b','c'] , dann sind die gewünschten Daten in der 3. und 4. Spalte. Wenn Sie ihre Namen bei der Ausführung des Skripts nicht kennen, können Sie dies tun

newdf = df[df.columns[2:4]] # Remember, Python is 0-offset! The "3rd" entry is at slot 2.

Wie EMS in seiner Antwort df.ix schneidet df.ix Spalten ein wenig prägnanter ab, aber die .columns Slicing-Schnittstelle ist vielleicht natürlicher, weil sie die .columns / Slicing-Syntax der Vanilla-1-D-Python-Liste verwendet.

WARN: 'index' ist ein schlechter Name für eine DataFrame Spalte. Dasselbe Label wird auch für das reale df.index Attribut, ein Index Array, verwendet. Ihre Spalte wird also von df['index'] und der echte DataFrame-Index wird von df.index . Ein Index ist eine spezielle Art von Series die für das Nachschlagen der Werte der Elemente optimiert ist. Für df.index ist es das Suchen nach Zeilen nach ihrem Label. Das df.columns Attribut ist auch ein pd.Index Array, um Spalten anhand ihrer Beschriftungen pd.Index .


Ich fand diese Methode sehr nützlich:

# iloc[row slicing, column slicing]
surveys_df.iloc [0:3, 1:4]

Weitere Details finden Sie here


Ich weiß, dass diese Frage ziemlich alt ist, aber in der neuesten Version von Pandas gibt es einen einfachen Weg, genau das zu tun. Spaltennamen (die Strings sind) können in beliebiger Weise geschnitten werden.

columns = ['b', 'c']
df1 = pd.DataFrame(df, columns=columns)

Wenn Sie einen Element-für-Zeile-Index und Spaltennamen erhalten möchten, können Sie es genauso machen wie df['b'][0] . Es ist so einfach wie Sie sich vorstellen können.

Oder Sie können df.ix[0,'b'] , gemischte Verwendung von Index und Label verwenden.


einfach verwenden: es wird b und c Spalte auswählen.

df1=pd.DataFrame()
df1=df[['b','c']]

dann kannst du einfach df1 anrufen:

df1




dataframe