迭代和更改熊猫中行的值(错误 "None of [Int64Index([10], dtype='int64')] are in the [index]" )


import pandas as pd
inp = [{'c1':10, '10':100, '11':100, '12':100},   
       {'c1':11,'10':110, '11':100, '12':100},  
       {'c1':12,'10':120, '11':100, '12':100}] .   
df = pd.DataFrame(inp)
     10      11      12     c1
0   100     100     100     10   
1   110     100     100     11   
2   120     100     100     12   
Expected Output ::
     10      11      12     c1
0   XX      100     100     10   
1   110     XX      100     11   
2   120     100     XX      12    

基本上,我想迭代每一行,并想选择C1列的值(例如 - 在第一次迭代中,我将获得值10)而不是考虑C1的值,我想更改raw [row ['''c1]至xx(示例 - 我们获得10的值,现在我想将RAW ['10']的值更改为xx

我尝试了:

for row in df.itertuples(index=True, name='Pandas'):  
    variable=getattr(row, "c1")  
    df.loc[{variable}]=1   
    Error what I Am getting is:
---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-226-e67900963f1d> in <module>
          7 for row in df.itertuples(index=True, name='Pandas'):
          8     variable=getattr(row, "c1")
    ----> 9     df.loc[{variable}]=1
         10 
         11 df
    /usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in __setitem__(self, key, value)
        187         else:
        188             key = com.apply_if_callable(key, self.obj)
    --> 189         indexer = self._get_setitem_indexer(key)
        190         self._setitem_with_indexer(indexer, value)
        191 
    /usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _get_setitem_indexer(self, key)
        173 
        174         try:
    --> 175             return self._convert_to_indexer(key, is_setter=True)
        176         except TypeError as e:
        177 
    /usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _convert_to_indexer(self, obj, axis, is_setter, raise_missing)
       1352                 kwargs = {'raise_missing': True if is_setter else
       1353                           raise_missing}
    -> 1354                 return self._get_listlike_indexer(obj, axis, **kwargs)[1]
       1355         else:
       1356             try:
    /usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _get_listlike_indexer(self, key, axis, raise_missing)
       1159         self._validate_read_indexer(keyarr, indexer,
       1160                                     o._get_axis_number(axis),
    -> 1161                                     raise_missing=raise_missing)
       1162         return keyarr, indexer
       1163 
    /usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _validate_read_indexer(self, key, indexer, axis, raise_missing)
       1244                 raise KeyError(
       1245                     u"None of [{key}] are in the [{axis}]".format(
    -> 1246                         key=key, axis=self.obj._get_axis_name(axis)))
       1247 
       1248             # We (temporarily) allow for some missing keys with .loc, except in
    KeyError: "None of [Int64Index([10], dtype='int64')] are in the [index]"

不建议在熊猫中循环,因为慢,但是如果需要:

for row in df.itertuples(index=True, name='Pandas'):  
    variable=getattr(row, "c1")  
    df.loc[row.Index, str(variable)]= 'XX'  
print (df)
    10   11   12  c1
0   XX  100  100  10
1  110   XX  100  11
2  120  100   XX  12

您也可以通过dict循环:

for k, v in df['c1'].to_dict().items():
    df.loc[k, str(v)] = 'XX'

您可以做到这一点:

res = df.copy()
for i in df.iterrows():
    res.loc[i[0], str(i[1]['c1'])] = 'xx'
res
    10      11      12  c1
0   xx     100     100  10
1   110     xx     100  11
2   120     100     xx  12

相关内容

最新更新