ValueError when adding a row to a Dataframe

I am trying to add dynamically to a Dataframe, but I get a ValueError: Incompatible Indexer with Dataframe in the line df.loc[count] = pandas.DataFrame(amounts).T .

 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) returns:

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

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

  1983-05-15 1983-11-15 1984-05-15 1984-11-15 1 1 1 101 
+6
source share
1 answer

You are doing it wrong, you are trying to assign a DataFrame to a row in a different data frame.

You need to use pandas.DataFrame(amounts).T.loc[<columnName>] on the right side.

Example -

 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 

Example / Demo -

 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]: AB 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 
+1
source

All Articles