我想先将一个csv文件按一列排序,然后再按另一列排序。
我尝试了一些在线的方法来对具有多列的csv文件进行排序。问题是排序是从左到右进行的,所以我得到类似这样的东西:1,10,100,101,102 ....当我想要这样的东西时,如1,2,3,4,5,6,7 ,8,9,10,11 ......
我用过这个讨论: Sorting CSV in Python 而这个模块: csvsort
我很感激任何参考或代码。
答案 0 :(得分:2)
听起来你想要的是序数/数字排序,但你得到的是字母排序。按字母排序将是1,10,100,2等,而顺序排序可以得到1,2,10,100。
当您从CSV读入数据时,您尝试排序的数据可能是字符串格式,您需要在调用Python的排序函数之前将其转换为int。
您可以通过将key = int作为参数传递给sort函数来执行此操作,这将导致它对正在排序的成员调用int()。
可在此处找到更多信息:How to sort a list numerically?
答案 1 :(得分:1)
我认为这应该有用,
import csv
reader = csv.reader(open("file.csv"))
sortedlist = sorted(reader, key=int(operator.itemgetter(3)))
# 3 or 'n' depending upon which column you want to sort the data
with open("sorted_file.csv", 'wb') as f:
csv.writer(f).writerows(sortedlist)
您只需在排序时将密钥转换为int类型。
Python令人印象深刻!
答案 2 :(得分:0)
如果您使用的熊猫库版本> 0.25,则可以使用 sort_values
$results = $statement->fetchAll();
if($results) {
foreach($result as $row) {
// ...
}
} else {
echo 'No records!';
}
df.sort_values([''Name','Sex'],ascending = [True,True])
import pandas as pd
df = pd.read_csv('biostats.csv')
df
Name Sex Age Height (in) Weight (lbs)
0 Alex M 41 74 170
1 Page F 31 67 135
2 Quin M 29 71 176
3 Ruth F 28 65 131
4 Ruth F 59 75 131
5 Quin M 19 55 46
答案 3 :(得分:0)
我有一个包含 input.csv 数据的 csv 文件:
1285,375,2.0,3.5,2473
260,380,2.0,3.5,3780
2205,35,1.0,1.75,4829
245,25,1.0,1.75,5632
570,1520,1.0,1.75,8240
465,35,1.0,1.75,10287
3325,35,1.0,0.75,20788
2480,75,1.0,1.75,23589
0,15,4.0,7.0,48424
使用 operator.itemgetter
时:
import csv
import operator
inputfile="input.csv"
with open(inputfile, newline='') as csvfile:
next(csvfile)
outcsv = csv.reader(csvfile, delimiter=',', quotechar='|')
sorted_csv = sorted(outcsv, key = operator.itemgetter(0))
for eachline in sorted_csv:
print(eachline)
我得到的输出按字母顺序排列在第一列中:
['0', '15', '4.0', '7.0', '48424']
['1285', '375', '2.0', '3.5', '2473']
['2205', '35', '1.0', '1.75', '4829']
['245', '25', '1.0', '1.75', '5632']
['2480', '75', '1.0', '1.75', '23589']
['260', '380', '2.0', '3.5', '3780']
['3325', '35', '1.0', '0.75', '20788']
['465', '35', '1.0', '1.75', '10287']
['570', '1520', '1.0', '1.75', '8240']
在第一列对 CSV 文件进行排序,并确保使用数值进行排序。我做了以下事情:
import csv
inputfile="input.csv"
with open(inputfile, newline='') as csvfile:
next(csvfile)
outcsv = csv.reader(csvfile, delimiter=',', quotechar='|')
sorted_csv = sorted(outcsv, key = lambda start_time: int(start_time[0]))
for eachline in sorted_csv:
print(eachline)
输出符合预期。
['0', '15', '4.0', '7.0', '48424']
['245', '25', '1.0', '1.75', '5632']
['260', '380', '2.0', '3.5', '3780']
['465', '35', '1.0', '1.75', '10287']
['570', '1520', '1.0', '1.75', '8240']
['1285', '375', '2.0', '3.5', '2473']
['2205', '35', '1.0', '1.75', '4829']
['2480', '75', '1.0', '1.75', '23589']
['3325', '35', '1.0', '0.75', '20788']
要按大小(数字的值)对任何其他列进行排序,只需替换行中的列号:
sorted_csv = sorted(outcsv, key = lambda start_time: int(start_time[0]))