如何使用新值更新列的特定 DataFrame 切片?

Bri*_*eny 3 python numpy pandas

我有一个 DataFrame,它有一个空列“pred”,我希望用一些特定值更新它。它们最初位于 numpy 数组中,但我将它们放在一个名为“this”的系列中: print(type(predictions))

print(predictions)
['collection2' 'collection2' 'collection2' 'collection1' 'collection2'
 'collection1']

this = pd.Series(predictions, index=test_indices)

print(type(data))
<class 'pandas.core.frame.DataFrame'>

print(data.shape)
(35, 4)

print(data.iloc[test_indices])
     class         pred                                          text  \
223  collection2   []  Fellow-Citizens of the Senate and House of Rep...   
20   collection1   []  The period for a new election of a citizen to ...   
12   collection1   []  Fellow Citizens of the Senate and of the House...   
13   collection1   []  Whereas combinations to defeat the execution o...   
212  collection2   []  MR. PRESIDENT AND FELLOW-CITIZENS OF NEW-YORK:...   
230  collection2   []  Fellow-Countrymen:\nAt this second appearing t...   

                                                 title  
223                               First Annual Message  
20                                    Farewell Address  
12                    Fifth Annual Message to Congress  
13   Proclamation against Opposition to Execution o...  
212                               Cooper Union Address  
230                           Second Inaugural Address 

print(type(this))
<class 'pandas.core.series.Series'>

print(this.shape)
(6,)

print(this)
0    collection2
1    collection1
2    collection1
3    collection1
4    collection2
5    collection2
Run Code Online (Sandbox Code Playgroud)

我想我可以这样做:

data.iloc[test_indices, [4]] = this
Run Code Online (Sandbox Code Playgroud)

但这会导致

IndexError: positional indexers are out-of-bounds
Run Code Online (Sandbox Code Playgroud)

或者

data.ix[test_indices, ['pred']] = this
KeyError: '[0] not in index'
Run Code Online (Sandbox Code Playgroud)

piR*_*red 5

尝试:

data.loc[data.index[test_indices], 'pred'] = this
Run Code Online (Sandbox Code Playgroud)