【问题标题】:Sort specific column in descending order and return the row for all the max values of the column, no pandas按降序对特定列进行排序并返回列的所有最大值的行,没有熊猫
【发布时间】:2019-06-15 08:29:50
【问题描述】:

我有一个作业问题,我们必须按第 3 列以降序对特定的 csv 文件进行排序。然后我们必须返回第 3 列中具有最大值的所有行,我们不能使用 pandas,因为我们还没有学会如何使用它们。我们必须为它编写一个函数,这样教授就可以将我们的函数调用到他的代码中并看到它的执行。

def bigRow():
    new_row = []
    with open('assignment2Data.csv', 'rU', newline='') as f:
        reader = csv.reader(f, delimiter='^')
        data = [x for x in reader]

    max_thirdcol_val = max([x[2] for x in data])

    for row in data:
        if row[2] == max_thirdcol_val:
            new_row.append(row)

    return new_row

我提交它时出错,因为:

File "UNITTEST.py", line 21, in test_unit
    assert(bigRow('assignment2Data.csv', 3)==answer or bigRow('assignment2Data.csv', 3)==answer2)
TypeError: bigRow() takes 0 positional arguments but 2 were given

【问题讨论】:

  • 你的函数应该有两个参数:一个是文件名,一个是列号。然后,您将不得不在函数中使用这些参数,而不是硬编码的值。
  • 所以我需要更新函数来读取 def bigRow('assignment2Data.csv', 3) ?
  • 否 - 函数参数就像变量名。测试将通过实际值。
  • 他说的是函数头。您将函数定义为具有零参数,并在函数调用中为其提供了两个参数。看看这个tutorial
  • 抱歉,我正在尝试为我的孩子做晚餐并同时处理这件事。如果我理解正确,我需要让函数say.... defbigRow(max_thirdcol_val, row)?

标签: python csv sorting


【解决方案1】:

测试代码尝试使用两个参数(文件名和列索引)调用您的函数。所以你需要把你的函数写成:

def bigRow(filename, column_index):
    with open(filename, 'rU', newline='') as f:
       reader = csv.reader(f, delimiter='^')
       data = [x for x in reader]
    # TODO: Complete this function :) 

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 2013-08-22
    • 1970-01-01
    • 2016-04-08
    • 2016-03-24
    • 1970-01-01
    • 2016-07-02
    • 2020-01-21
    • 2022-01-09
    相关资源
    最近更新 更多