pandas 向 Dataframe 添加行时出现 ValueError
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/32001596/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
ValueError when adding row to Dataframe
提问by user131983
I am trying to append to a Dataframe dynamically, but get the error ValueError: Incompatible Indexer with Dataframein the line df.loc[count] = pandas.DataFrame(amounts).T.
我想添加到一个数据帧动态,但得到的错误ValueError: Incompatible Indexer with Dataframe在该行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:
print('1', df)返回:
1983-05-15 1983-11-15 1984-05-15 1984-11-15
NaN NaN NaN NaN
print('2', pandas.DataFrame(amounts).T)returns:
print('2', pandas.DataFrame(amounts).T)返回:
1983-05-15 1983-11-15 1984-05-15 1984-11-15
1 1 1 101
采纳答案by Anand S Kumar
You are doing it wrongly , you are trying to assign a DataFrame to a row in another dataframe.
你做错了,你试图将一个数据帧分配给另一个数据帧中的一行。
You need to use pandas.DataFrame(amounts).T.loc[<columnName>]on the right side.
您需要pandas.DataFrame(amounts).T.loc[<columnName>]在右侧使用。
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]:
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

