Die Zuweisung des Tupels zur Zelle des Pandas-Datenrahmens schlägt bei einem verbundenen Datenrahmen fehlPython

Python-Programme
Guest
 Die Zuweisung des Tupels zur Zelle des Pandas-Datenrahmens schlägt bei einem verbundenen Datenrahmen fehl

Post by Guest »

Ich habe einen Datenrahmen mit Tupeln in Zellen:

Code: Select all

import numpy as np
import pandas as pd

data = np.empty((3, 4), dtype=[('cost', np.int32), ('count', np.int32)])

data['count'] = 0
data['cost']  = [[10, 2, 20, 11],
[12,  7,  9, 20],
[ 2, 14, 16, 18]]

sup            = [1, 2, 3]

df = pd.DataFrame(data=data.tolist(), columns=[f'{i+1}' for i in range(len(data[0]))])
df = df.join(pd.DataFrame(sup, columns=['Supplies']))

print(df)
Was folgende Ausgabe ergibt:

Code: Select all

         1        2        3        4  Supplies
0  (10, 0)   (2, 0)  (20, 0)  (11, 0)         1
1  (12, 0)   (7, 0)   (9, 0)  (20, 0)         2
2   (2, 0)  (14, 0)  (16, 0)  (18, 0)         3
Als nächstes möchte ich eine Zelle aktualisieren:

Code: Select all

df.loc[1, '1'] = (1,2)
aber ich erhalte die Meldung „ValueError: Must have equal len keys and value when set with an iterable
Das gleiche Problem tritt mit der Liste auf.“ . Die Zuweisung von nicht iterierbaren Datentypen wie String oder Integer funktioniert gut.
Als nächstes entferne ich diesen Join:

Code: Select all

df = df.join(pd.DataFrame(sup, columns=['Supplies']))
Ich kann Zellen problemlos Tupeln zuweisen.
Ich vermute, dass das passiert, weil versucht wird, nicht eine einzelne Zelle zu aktualisieren (aber was?)< /p>
Mittlerweile funktioniert die Zuweisung mit df.at gut, aber warum nicht mit df.loc?

Code: Select all

df.at[1, '1'] = (1,2)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post