Łatwe zadanie polegające na dodaniu wiersza do obiektu pandas.DataFrame
wydaje się trudne. Istnieją 3 pytania dotyczące stackoverflow związane z tym, z których żaden nie daje działającej odpowiedzi.Pandy Pythona: wypełnij rząd ramki danych wierszem
Oto, co próbuję zrobić. Mam DataFrame, którego znam już kształt, jak również nazwy wierszy i kolumn.
>>> df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])
>>> df
a b c d
x NaN NaN NaN NaN
y NaN NaN NaN NaN
z NaN NaN NaN NaN
Teraz mam funkcję do obliczania wartości wierszy iteracyjnie. Jak mogę wypełnić jeden z wierszy słownikiem lub pandas.Series
? Oto różne próby, które się nie powiodły:
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df['y'] = y
AssertionError: Length of values does not match length of index
Najwyraźniej próbował dodać kolumnę zamiast wiersza.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.join(y)
AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'
Bardzo nieinformacyjny komunikat o błędzie.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.set_value(index='y', value=y)
TypeError: set_value() takes exactly 4 arguments (3 given)
Najwyraźniej jest to tylko ustawienie indywidualnych wartości w ramce danych.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.append(y)
Exception: Can only append a Series if ignore_index=True
Cóż, nie chcę, aby zignorować indeksu, inaczej oto wynik:
>>> df.append(y, ignore_index=True)
a b c d
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 1 5 2 3
To nie wyrównać nazwy kolumn z wartościami, ale stracił etykiety wierszy.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.ix['y'] = y
>>> df
a b \
x NaN NaN
y {'a': 1, 'c': 2, 'b': 5, 'd': 3} {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z NaN NaN
c d
x NaN NaN
y {'a': 1, 'c': 2, 'b': 5, 'd': 3} {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z NaN NaN
To również zakończyło się nieszczęśliwie.
Jak to zrobić?
widzę. Tak więc atrybut 'loc' ramki danych definiuje specjalne' __setitem__', które robi magię, jak przypuszczam. – xApple
Czy można skonstruować to w jednym przebiegu (np. Z kolumnami, indeksem i y)? –
Więc jeśli mogę wygenerować jeden wiersz na raz, w jaki sposób mogę optymalnie zbudować ramkę danych? – xApple