2015-08-14 16 views
6

Próbuję dynamicznie dołączyć do ramki danych, ale pojawia się błąd ValueError: Incompatible Indexer with Dataframe w linii df.loc[count] = pandas.DataFrame(amounts).T.ValueError przy dodawaniu wiersza do ramki danych

df = pandas.DataFrame(index=numpy.arange(0, 1), columns=required_indices_of_series) 
#This just creates a dataframe with the right columns, but with values I need to modify, which I aim to do below. 
print('1', df) 
count = 0 
for bond in bonds: 
    #Some stuff here to get the Series Object `amounts` which is irrelevant. 
    print('2', pandas.DataFrame(amounts).T) 
    df.loc[count] = pandas.DataFrame(amounts).T 
    count += 1 

print('1', df) powraca:

 1983-05-15  1983-11-15  1984-05-15  1984-11-15 
      NaN   NaN    NaN    NaN 

print('2', pandas.DataFrame(amounts).T) powraca:

 1983-05-15  1983-11-15  1984-05-15  1984-11-15 
      1   1    1    101 

Odpowiedz

1

robisz to źle, próbujesz przypisać DataFrame wierszowi w innym dataframe.

Musisz użyć pandas.DataFrame(amounts).T.loc[<columnName>] po prawej stronie.

przykład -

df = pandas.DataFrame(index=numpy.arange(0, 1), columns=required_indices_of_series) 
#This just creates a dataframe with the right columns, but with values I need to modify, which I aim to do below. 
print('1', df) 
count = 0 
for bond in bonds: 
    #Some stuff here to get the Series Object `amounts` which is irrelevant. 
    print('2', pandas.DataFrame(amounts).T) 
    df.loc[count] = pandas.DataFrame(amounts).T.loc[<column>] 
    count += 1 

Przykład/testowa -

In [23]: df1.loc[0] = pd.DataFrame(s).T.loc['A'] 

In [24]: df1 
Out[24]: 
    0 1 
0 1 3 
1 NaN NaN 

In [25]: df = pd.DataFrame([[1,2],[3,4]],columns=['A','B']) 

In [26]: df 
Out[26]: 
    A B 
0 1 2 
1 3 4 

In [27]: df1 = pd.DataFrame(index = np.arange(0,1),columns = s.index) 

In [28]: df1 
Out[28]: 
    0 1 
0 NaN NaN 

In [29]: s = df['A'] 

In [30]: df1.loc[0] = pd.DataFrame(s).T 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-30-24065a81c953> in <module>() 
----> 1 df1.loc[0] = pd.DataFrame(s).T 

C:\Anaconda3\lib\site-packages\pandas\core\indexing.py in __setitem__(self, key, value) 
    113  def __setitem__(self, key, value): 
    114   indexer = self._get_setitem_indexer(key) 
--> 115   self._setitem_with_indexer(indexer, value) 
    116 
    117  def _has_valid_type(self, k, axis): 

C:\Anaconda3\lib\site-packages\pandas\core\indexing.py in _setitem_with_indexer(self, indexer, value) 
    495 
    496    elif isinstance(value, ABCDataFrame): 
--> 497     value = self._align_frame(indexer, value) 
    498 
    499    if isinstance(value, ABCPanel): 

C:\Anaconda3\lib\site-packages\pandas\core\indexing.py in _align_frame(self, indexer, df) 
    688    return df.reindex(idx, columns=cols).values 
    689 
--> 690   raise ValueError('Incompatible indexer with DataFrame') 
    691 
    692  def _align_panel(self, indexer, df): 

ValueError: Incompatible indexer with DataFrame 

In [31]: df1.loc[0] = pd.DataFrame(s).T.loc['A'] 

In [32]: df1 
Out[32]: 
    0 1 
0 1 3 
+0

Dzięki. Zrobiłem 'df.loc [count] = pandas.DataFrame (kwoty) .T.loc [required_indices_of_series]' ale dostaję błąd 'KeyError: Brak datetime.date (1983-05-15) datetime.date (1983-11 -15) datetime.date (1984-05-15) datetime.date (1984-11-15) znajdują się w [indeksie] ', które myślałem, że są, jak widać na moim pytaniu. – user131983

+0

Należy użyć kolumn nie indeks, podaj nazwę kolumny, które chcesz. Kiedy mówię kolumna, mam na myśli nowy indeks, ponieważ transponujesz, Kolumny stają się indeksem, a indeks staje się kolumnami –

Powiązane problemy