python - 当我尝试对包含数字数据的 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
解决方案
根据csv.reader 下的https://docs.python.org/3/library/csv.html,当它解析您的文件时,我相信它会返回字符串对象,因此当您对它们进行排序时,您的数字实际上表示为字符串。您需要先将它们转换为整数/浮点数才能将它们排序为数字。
推荐阅读
- html - VBA网页抓取,SPAN问题
- python - Python vs MATLAB 在算法上的表现
- c# - Page.ClientScript.RegisterStartupScript 不只在一页上注入脚本
- javascript - 抓取需要触发 javascript 的外部网站
- css - 除了谷歌自定义搜索,我如何使用我的所有表格的表格 CSS 属性?
- git - 如何使用 git merge 恢复 master?(即恢复VIA合并)
- java - 我怎样才能返回正确的值?
- ignite - 如果两个 Ignite 集群在单个子网中管理,我们应该参考什么组播组?
- reactjs - 当 mapStateToProps 在 create 创建一个新的 axios 调用
- r - R - geom_point - 用于图例的分组