wake-up-neo.com

Fügen Sie eine neue Zeile zu einem Pandas DataFrame mit einem bestimmten Indexnamen hinzu

Ich versuche, dem DataFrame eine neue Zeile mit einem bestimmten Indexnamen 'e' hinzuzufügen.

    number   variable       values
a    NaN       bank          true   
b    3.0       shop          false  
c    0.5       market        true   
d    NaN       government    true   

Ich habe folgendes versucht, aber es wird eine neue Spalte anstatt einer neuen Zeile erstellt. 

new_row = [1.0, 'hotel', 'true']
df = df.append(new_row)

Immer noch nicht verstehen, wie die Zeile mit einem bestimmten Index eingefügt wird. Bin für Vorschläge dankbar.

14
samba

Sie können df.loc[_not_yet_existing_index_label_] = new_row verwenden.

Demo:

In [3]: df.loc['e'] = [1.0, 'hotel', 'true']

In [4]: df
Out[4]:
   number    variable values
a     NaN        bank   True
b     3.0        shop  False
c     0.5      market   True
d     NaN  government   True
e     1.0       hotel   true

Mit dieser Methode können Sie keine Zeile mit bereits vorhandenem (doppeltem) Indexwert (Label) hinzufügen. Eine Zeile mit diesem Index-Label wird in diesem Fall updaten .


UPDATE:

Dies funktioniert möglicherweise nicht in der letzten Version von Pandas/Python3, wenn der Index eine .__ ist. DateTimeIndex und der Index der neuen Zeile ist nicht vorhanden.

es wird funktionieren, wenn wir korrekte Indexwerte angeben.

Demo (mit pandas: 0.23.4):

In [17]: ix = pd.date_range('2018-11-10 00:00:00', periods=4, freq='30min')

In [18]: df = pd.DataFrame(np.random.randint(100, size=(4,3)), columns=list('abc'), index=ix)

In [19]: df
Out[19]:
                      a   b   c
2018-11-10 00:00:00  77  64  90
2018-11-10 00:30:00   9  39  26
2018-11-10 01:00:00  63  93  72
2018-11-10 01:30:00  59  75  37

In [20]: df.loc[pd.to_datetime('2018-11-10 02:00:00')] = [100,100,100]

In [21]: df
Out[21]:
                       a    b    c
2018-11-10 00:00:00   77   64   90
2018-11-10 00:30:00    9   39   26
2018-11-10 01:00:00   63   93   72
2018-11-10 01:30:00   59   75   37
2018-11-10 02:00:00  100  100  100

In [22]: df.index
Out[22]: DatetimeIndex(['2018-11-10 00:00:00', '2018-11-10 00:30:00', '2018-11-10 01:00:00', '2018-11-10 01:30:00', '2018-11-10 02:00:00'], dtype='da
tetime64[ns]', freq=None)
26
MaxU

Verwenden Sie "Anhängen", indem Sie einen Datenrahmen in eine Liste umwandeln, falls Sie mehrere Zeilen gleichzeitig hinzufügen möchten 

df = df.append(pd.DataFrame([new_row],index=['e'],columns=df.columns))

Oder für eine Zeile (Danke @Zero)

df = df.append(pd.Series(new_row, index=df.columns), name='e') #EDIT: there was a missing ')'

Ausgabe: 

 Anzahl variabler Werte 
 a NaN Bank True 
 b 3.0 shop False 
 c 0.5 Markt True 
 d NaN-Regierung.
8
Dark

Wenn es die erste Reihe ist, brauchen Sie:

df = Dataframe(columns=[number, variable, values])
df.loc['e', [number, variable, values]] = [1.0, 'hotel', 'true']
0
Kim Miller