【问题标题】:Python Sorting Data From CSV File [duplicate]Python从CSV文件中排序数据[重复]
【发布时间】:2021-12-27 20:06:53
【问题描述】:

所以我正在尝试按 csv 文件中的值一堆数据进行排序,但输出错误。所以有什么意见吗? 注意:我应该在没有 pandas 的情况下解决它。谢谢

import csv
import operator

with open('final.csv', 'r') as csvFile:
    reader = csv.reader(csvFile)
    for row in reader:
        sortedlist = sorted(reader, key=operator.itemgetter(1), reverse=True)

for eachline in sortedlist:
    print(eachline)

csvFile.close()

和输出:

['sara', '9.75']
['soheila', '7.833333333333333']
['hamid', '6.066666666666666']
['ali', '5.0']
['sarvin', '11.375']
['sina', '11.285714285714286']

【问题讨论】:

  • 你的代码结构很好。您希望对第二列值进行排序,就好像它们是浮点数而不是文本一样。所以这至少是解决方案的一部分。接下来,您是否希望这些值实际上是(转换为)浮点数,还是保留为字符串并仅被排序器解释为为浮点数?
  • 这个问题 (stackoverflow.com/a/26725820/246801) 是关于整数,而不是浮点数(就像你有的那样),但它是同一个问题,也是我认为你想要的解决方案。
  • @ZachYoung 是的,最终输出应该是 string 。我通过您的回答意识到分拣机应该处理 floats 。你能给我解释一下吗?谢谢
  • 您查看我建议的链接了吗?查看已接受解决方案的第一行 sorted(XWordDict... 以及它们如何使用 float()itemgetter() 作为 key 参数的一部分。试一试,如果不起作用,请更新您的代码,我们可以看看。

标签: python csv file sorting


【解决方案1】:

for row in reader:
        sortedlist = sorted(reader, key=operator.itemgetter(1), reverse=True)
   

for row in reader 将消耗第一行。
然后你正在排序reader,这将对除第一行之外的所有行进行排序

猜你可以去掉 for 循环,然后就可以了


        sortedlist = sorted(reader, key=operator.itemgetter(1), reverse=True)
   

你在寻找别的东西吗?

【讨论】:

  • 谢谢。我尝试过这个 。但它没有用:(
  • itemgetter 正在努力获取第二列中的值,但它是以字符串形式获取的,而不是浮点数:排序是文本的,而不是数字的。
【解决方案2】:

首先获取列表中的所有行,然后按值对列表进行排序:

import csv
import operator

rows = []
with open('final.csv', 'r') as csvFile:
    reader = csv.reader(csvFile)
    for row in reader:
        rows.append(row)

sorted(rows, key=lambda x: x[1])

【讨论】:

  • 不幸的是它给了我同样的输出。
  • 不应该这样,你为什么不打印我发送给你的确切命令 print(sorted(rows, key=lambda x: x[1]))
  • 这与escridhar的解决方案有同样的问题,第二列被排序为文本,而不是浮动。我要求 OP 澄清第二列是否应该转换为浮点数,或者只是解释为浮点数进行排序。
猜你喜欢
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2013-06-26
  • 2013-01-21
相关资源
最近更新 更多