【问题标题】:Pandas Reduction Error when trying to update dataframe尝试更新数据框时出现熊猫减少错误
【发布时间】:2013-05-08 23:27:47
【问题描述】:

我需要像 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

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

【问题讨论】:

  • 请在filee.csv中发布行示例。
  • 姓名,姓安迪,蓝乔,史密斯
  • 试试df['LastName'] = df.apply(updateDataframe),但更好的是:df.ix[df['LastName']=='Joe','LastName'] = 'Black'

标签: python pandas


【解决方案1】:

@Jeff 在上面的 cmets 中对您的问题有很好的简洁实现,但是如果您想修复代码中的错误,请尝试以下操作:

对于文件filee.csv,内容如下:

Name,LastName
Andy,Blue
Joe,Smith 

在else之后,需要返回一个Last Name字符串而不是一个row对象,如下图: 导入熊猫

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2016-10-18
    • 2021-06-17
    • 2015-11-10
    • 1970-01-01
    • 2017-02-14
    相关资源
    最近更新 更多