首页 > 解决方案 > 当我尝试对包含数字数据的 csv 文件中的列进行排序时,它不会按照我期望的方式排序

问题描述

我正在尝试编写一个程序,询问用户他们希望按 csv 文件中的哪一列排序,并生成一个按请求的列排序的新 csv 文件,其中一些列包含字符串,其他列包含整数,其他列包含浮点数。当我尝试按包含整数或浮点数的列进行排序时,它不会按照我想要的方式排序。如果这有意义的话,就好像它是按“字母顺序”对数字进行排序一样。

简而言之,我在尝试正确排序数字列时遇到问题。

我正在尝试仅导入 csv 模块。

import csv


user_input = input("What would you like to sort by? (Country,Name, GDPPC, Literacy, InfantMortality, Agriculture, Population, NetMigration)")


with open('Countries.csv', 'r', newline='') as input_file:
    csv_input = csv.DictReader(input_file)
    data = sorted(csv_input,reverse=True, key=lambda row: (row[user_input]))

with open('Countries_Sorted.csv', 'w') as output_file:
    csv_output = csv.DictWriter(output_file, fieldnames=csv_input.fieldnames)
    csv_output.writeheader()
    csv_output.writerows(data)


with open('Countries_Sorted.csv', 'r') as final_file:
    for line in final_file:
        print(line)

如果我尝试按人口进行排序,我会得到这样的结果......

Population
99390000
9845000
9799000
9651000
9513000
92900
91700000
9157000
91510000
892145

当它应该产生这样的东西时......

Population
1371000000
1311000000
321400000
257600000
207800000
188900000
182200000
161000000
144100000
127000000

标签: pythonpython-3.xcsvsorting

解决方案


根据csv.reader 下的https://docs.python.org/3/library/csv.html,当它解析您的文件时,我相信它会返回字符串对象,因此当您对它们进行排序时,您的数字实际上表示为字符串。您需要先将它们转换为整数/浮点数才能将它们排序为数字。


推荐阅读