2013-03-29 11 views
6

mam ten pandy dataframe:dodanie nowej kolumny do pandasowej ramki danych z wartościami dla poszczególnych elementów?

d=pandas.DataFrame([{"a": 1}, {"a": 3, "b": 2}]) 

i próbuję dodać nową kolumnę do niego z wartościami niż null tylko dla niektórych rzędach, na podstawie ich wskaźników liczbowych w tablicy. Na przykład, dodanie nowej kolumny „c” tylko do pierwszego wiersza w d:

# array of row indices 
indx = np.array([0]) 
d.ix[indx]["c"] = "foo" 

której należy dodać „foo” w kolumnie „c” wartości w pierwszym rzędzie, i NaN dla wszystkich innych rzędów. ale to chyba nie zmienia tablicy:

d.ix[np.array([0])]["c"] = "foo" 
In [18]: d 
Out[18]: 
    a b 
0 1 NaN 
1 3 2 

co ja tu robię źle? Jak można to zrobić? dzięki.

+0

Jeśli jest to coś w rodzaju tablicy numpy, nie powinno to być jednorodna? – dusual

+0

Bardzo możliwe, że mamy panda df z mieszaniną wartości łańcuchów i wartości NaN. – user248237dfsf

Odpowiedz

6
In [11]: df = pd.DataFrame([{"a": 1}, {"a": 3, "b": 2}]) 

In [12]: df['c'] = np.array(['foo',np.nan]) 

In [13]: df 
Out[13]: 
    a b c 
0 1 NaN foo 
1 3 2 nan 

Gdybyś przypisanie wartości liczbowej, co następuje będzie działać

In [16]: df['c'] = np.nan 

In [17]: df.ix[0,'c'] = 1 

In [18]: df 
Out[18]: 
    a b c 
0 1 NaN 1 
1 3 2 NaN 
+0

Wiedziałem, że zadziała, gdybym przydzielił całą tablicę do 'df ['c']', ale nie ma sposobu na przypisanie tylko określonych elementów i czy wywnioskował, że reszta to 'NaN'? Wygląda na to, że muszę jawnie skonstruować tablicę o rozmiarze 'len (df)' z nans i non-wartości ... – user248237dfsf

+0

'' df ['c']. Update (pd.Series (['foo'], index = [0])) '' powinien działać, ale to jest teraz błąd, jeśli twoje przypisania są numeryczne, to możesz po prostu użyć mojego drugiego przykładu: – Jeff

+0

dzięki. nie są numeryczne, więc pozostanę przy ręcznym konstruowaniu całej tablicy – user248237dfsf

Powiązane problemy