2017-12-12 5 views
2

Ich verstehe, dass ich bei einzustellen Wert von bestimmten Zell robust verwenden:„entsprechende Funktion ILoc“ als „an zu loc“ für Pandas

index = "a" 
df.at[index,"some_list"] = [] 

beachten Sie, dass loc verwendet wird, konnte nicht da

df.loc[index,"some_list"] = [] 

führt zum Fehler

ValueError: Must have equal len keys and value when setting with an iterable 

das Problem ist, manchmal, der Index noch nicht eindeutig weiß, dass ich die genauen Iloc, um den Wert festzulegen. So was muss ich tun, ist

df.iloc[some_number_1,some_number_2] = [] 

aber dies führt zu

ValueError: Must have equal len keys and value when setting with an iterable 

gibt es in Korrespondenz einige so iLOC, dass ich den Wert einstellen könnte?

Zum Beispiel

df.at_iloc[some_number_1,some_number_2] = [] 

Danke.

Hinweis: Diese Frage wird dupliziert nicht, da ich die für loc bei Variante müssen die IAT entpuppen ...

+0

I bezweifeln, dass es eine saubere Lösung gibt, 'numpy' /' pandas' ist nicht darauf ausgelegt, Listenobjekte zu haben. –

+3

Die Verwendung von 'pd' für einen DataFrame-Namen ist übrigens ziemlich verwirrend. – ayhan

+0

ich änderte pd in df. – user40780

Antwort

2

Sie suchen iat:

In [7]: df 
Out[7]: 
    0 1 
a 1 9 
b 7 7 
a 2 0 
c 1 8 
b 6 7 

In [8]: df.iat[0,1] 
Out[8]: 9 

Sie werden nach wie vor müssen irgendwie Schleife, es ist nie saubere Arbeiten mit objekt dtypes und list Objekte zu verwenden, da Pandas sie wie eine Sequenz nicht ein Skalar zu behandeln neigt, so etwas wie diese:

In [9]: for i, b in enumerate(df.index.get_loc('a')): 
    ...:  if b: 
    ...:   df.iat[i, 1] = [] 
    ...: 

In [10]: df 
Out[10]: 
    0 1 
a 1 [] 
b 7 7 
a 2 [] 
c 1 8 
b 6 7 

Auch hier beachten Sie die riesige rote Flagge von Objekt-dtypes:

In [18]: df.dtypes 
Out[18]: 
0 object 
1 object 
dtype: object 
2

Sie müssen vorsichtig sein, die feinen Unterschiede zwischen iloc und loc kennt.
iloc verwaltet die implizite Indexierung im Python-Stil bei der Auswahl von Zeilen in einem Pandas-Dataframe. Dagegen verwendet loc den expliziten Index des Dataframe.

Having said that, den Wert eines Datenrahmens Datensatz zu ändern, wenn die natürliche Ordnung iloc verwendet, wird wissen, Sie einfach tun:

df.iloc[some_number_1] = some_number_2 

Als Beispiel

import pandas as pd 
a = pd.DataFrame({'a': [1, 3, 5, 7, 9], 'b': [2, 4, 6, 8, 0]}, 
        index = [1,3,4,4,5]) 

    a b 
1 1 2 
3 3 4 
4 5 6 
4 7 8 
5 9 0 

wir Angenommen möchte die Werte des 1. natürlichen Index ändern mit iloc

a.iloc[1] = [12, 13] 

    a b 
1 1 2 
3 12 13 
4 5 6 
4 7 8 
5 9 0 
+0

Ja, leider das OP versucht ein * Listenobjekt * einzufügen. Ich habe gelernt, aufzuhören, gegen diesen Ansatz zu argumentieren, weil er dazu tendiert, auf taube Ohren zu stoßen. –

Verwandte Themen