Pandas: Füllen Sie fehlende Werte mit einem leeren Numpy -Array ausPython

Python-Programme
Anonymous
 Pandas: Füllen Sie fehlende Werte mit einem leeren Numpy -Array aus

Post by Anonymous »

Ich habe einen PANDAS -Datenfreen, den ich aus einem solchen Prozess abstelle: < /p>

Code: Select all

df1 = pd.DataFrame({'c1':['A','B','C','D','E'],'c2':[1,2,3,4,5]})
df2 = pd.DataFrame({'c1':['A','B','C'],'c2':[1,2,3],'c3': [np.array((1,2,3,4,5,6)),np.array((6,7,8,9,10,11)),np.full((6,),np.nan)]})
df3 = df1.merge(df2,how='left',on=['c1','c2'])
This looks like this:



c1
c2
c3

< /thead>


A < /td>
1 < /td>

Code: Select all

[1,2,3,4,5,6]< /code> < /td>
< /tr>

 b < /td>
 2 < /td>
[6,7,8,9,10,11]< /code> < /td>
< /tr>

 C < /td>
 3 < /td>
[nan,nan,nan,nan,nan,nan]< /code> < /td>
< /tr>

 d < /td>
 4 < /td>
NaN< /code> < /td>
< /tr>

 E < /td>
 5 < /td>
NaN




Um den nächsten Schritt meines Codes auszuführen, benötige ich alle Arrays in C3 , um eine konsistente Länge zu haben. Für die Eingaben, die einkamen, waren im Join (d. H. Zeile 1 bis 3) dies bereits erledigt. Für die Zeilen, die in DF2 fehlten, in denen ich jetzt nur einen einzelnen Nan -Werte habe (Zeilen 4 und 5), muss ich diese Nan durch ein Array von Nan -Werten wie in Zeile 3. ersetzen. Das Problem ist, dass ich nicht herausfinden kann, wie ich es tun kann.

Code: Select all

df3.loc[pd.isnull(df3.c3),'c3'] = np.full((6,),np.nan)
< /code>
, was mir ein < /p>
gabValueError: Must have equal len keys and value when setting with an iterable
< /code>
fair genug; Ich verstehe diesen Fehler und warum Python verwirrt ist, was ich versuche zu tun. Wie wäre es damit? < /P>
for i in df3.index:
df3.at[i,'c3'] = np.full((6,),np.nan) if all(pd.isnull(df3.c3)) else df3.c3
< /code>
Dieser Code wird ohne Fehler ausgeführt, aber wenn ich dann DF3 ausdrucken (oder ihn verwenden), erhalte ich diesen Fehler: < /p>
RecursionError: maximum recursion depth exceeded
< /code>
Das, das ich nicht verstehe, aber weitermachen, was ist, wenn ich eine Spalte voller Nan -Arrays vorscheide und dann nach dem Join: < /p>
etwas Logik machen kann: < /p>
for i in df1.index: df1.at[i,'c4'] = np.full((6,),np.nan)
< /code>
Dies gibt mir den verständlichen Fehler: < /p>
ValueError: setting an array element with a sequence
< /code>
Wie wäre es mit einer anderen Variation derselben Idee: < /p>
df1['c4'] = np.full((6,),np.nan)
< /code>
Dies gibt einen anderen, auch verständlichen Fehler: < /p>
ValueError: Length of values (6) does not match length of index (5)
< /code>
Daher die Frage: Wie ersetze ich Werte in meinem Datenrahmen (in diesem Fall Nullwerte) durch ein leeres Numpy-Array einer bestimmten Länge? />
c1
c2
c3




A
1
[1,2,3,4,5,6]< /code> < /td>
< /tr>

 b < /td>
 2 < /td>
[6,7,8,9,10,11]< /code> < /td>
< /tr>

 C < /td>
 3 < /td>
[nan,nan,nan,nan,nan,nan]< /code> < /td>
< /tr>

 d < /td>
 4 < /td>
[nan,nan,nan,nan,nan,nan]< /code> < /td>
< /tr>

 E < /td>
 5 < /td>
[nan,nan,nan,nan,nan,nan]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post