向数据框中添加行时出现ValueError错误。

8

我想动态地向一个Dataframe中添加内容,但是在这一行代码df.loc[count] = pandas.DataFrame(amounts).T中出现了错误ValueError: Incompatible Indexer with Dataframe

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) 返回:

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

print('2', pandas.DataFrame(amounts).T) 的输出结果为:

     1983-05-15      1983-11-15      1984-05-15      1984-11-15
            1            1             1              101
1个回答

8

您错误地尝试将一个DataFrame分配给另一个数据帧中的一行。

您需要在右侧使用pandas.DataFrame(amounts).T.loc[<columnName>]

例如 -

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

示例/演示 -
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

谢谢。我执行了df.loc[count] = pandas.DataFrame(amounts).T.loc[required_indices_of_series]但是出现了错误KeyError: None of datetime.date(1983-05-15) datetime.date(1983-11-15) datetime.date(1984-05-15) datetime.date(1984-11-15) are in the [index],而根据我的问题描述来看,我认为它们应该在[index]中。 - user131983
你需要使用列而不是索引,提供你想要的列名。当我说列时,我指的是新的索引,因为你正在转置,列变成了索引,索引变成了列。 - Anand S Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接