尝试更新数据帧时的Pandas Reduction Error

时间:2013-05-08 23:27:48

标签: python pandas

我需要更新数据框中的一些数据,与SQL中的更新查询相同。我目前的代码如下:

import pandas

df = pandas.read_csv('filee.csv') # load trades from csv file       

def updateDataframe(row):
    if row['Name'] == "Joe":
        return "Black"
    else:
        return row

df['LastName'] = df.apply(updateDataframe,axis=1)

但是,它会返回以下错误:

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    df['LastName'] = df.apply(updateDataframe,axis=1)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/frame.py", line 2038, in __setitem__
    self._set_item(key, value)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/frame.py", line 2085, in _set_item
    NDFrame._set_item(self, key, value)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/generic.py", line 582, in _set_item
    self._data.set(key, value)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/internals.py", line 1459, in set
    _set_item(self.items[loc], value)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/internals.py", line 1454, in _set_item
    block.set(item, arr)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/internals.py", line 176, in set
    self.values[loc] = value
ValueError: output operand requires a reduction, but reduction is not enabled

我该如何解决这个问题。或者有更好的方法来完成我想要做的事情吗?

1 个答案:

答案 0 :(得分:2)

@Jeff在上面的评论中对您的问题进行了简明扼要的实现,但如果您想在代码中修复错误,请尝试以下操作:

对于文件 filee.csv ,包含以下内容:

Name,LastName
Andy,Blue
Joe,Smith 

在else之后,您需要返回 Last Name 字符串而不是行对象,如下所示:     进口熊猫

df = pandas.read_csv('filee.csv') # load trades from csv file       

def updateDataframe(row):
    if row['Name'] == "Joe":
        return "Black"
    else:
        return row['LastName']

df['LastName'] = df.apply(updateDataframe,axis=1)
print df

产生以下输出:

   Name LastName
0  Andy     Blue
1   Joe    Black