簡體   English   中英

如何使用特定列使用python對csv文件中的數據進行排序

[英]how to sort data in csv file using python using particular column

我正在從csv文件中讀取數據,並嘗試通過使用特定列對數據進行排序,例如從csv文件中讀取數據給100名學生,並且必須根據標記對數據進行排序

import csv
import operator

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

for eachline in sortedlist:
    print(eachline)

csvFile.close()

Excel工作表中的CSV文件,並且該文件沒有列名,以下是CSV文件數據

1,Lois,Walker,F,lois.walker@hotmail.com,Donald Walker,Helen Walker,40,303-572-8492
2,Brenda,Robinson,F,brenda.robinson@gmail.com,Raymond Robinson,Judy Robinson,80,225-945-4954
3,Joe,Robinson,M,joe.robinson@gmail.com,Scott Robinson,Stephanie Robinson,70,219-904-2161
4,Diane,Evans,F,diane.evans@yahoo.com,Jason Evans,Michelle Evans,90,215-793-6791
5,Benjamin,Russell,M,benjamin.russell@charter.net,Gregory Russell,Elizabeth Russell,56,262-404-2252
6,Patrick,Bailey,M,patrick.bailey@aol.com,Ralph Bailey,Laura Bailey,36,319-812-6957
7,Nancy,Baker,F,nancy.baker@bp.com,Scott Baker,Judy Baker,78,229-336-5117

下面應該為您工作,我在讀取csv之后創建了一個行列表,這樣標記實際上是整數,而不是從csv讀取時是字符串

另外我假設在csv中有多個空格,所以我使用了一個空格分隔符,因此itemgetter索引選擇為9,這可能會因您的csv看起來而有所不同

import csv
import operator

li = []

#Open csv file
with open('file.csv', 'r') as csvFile:
    reader = csv.reader(csvFile, delimiter=' ', skipinitialspace=True )

    #Create a list of all rows such that the marks column is an integer
    for item in reader:
        #Save marks value as an integer, leave other values as is
        l = [int(value) if idx == 9 else value for idx, value in enumerate(item)]
        li.append(l)

#Sort on that item
print(sorted(li, key=operator.itemgetter(9), reverse=True))

我的csv看起來像:

1   Lois    Walker  F   lois.walker@hotmail.com Donald Walker   Helen Walker    40  303-572-8492
2   Brenda  Robinson    F   brenda.robinson@gmail.com   Raymond Robinson    Judy Robinson   80  225-945-4954
3   Joe Robinson    M   joe.robinson@gmail.com  Scott Robinson  Stephanie Robinson  70  219-904-2161
4   Diane   Evans   F   diane.evans@yahoo.com   Jason Evans Michelle Evans  90  215-793-6791
5   Benjamin    Russell M   benjamin.russell@charter.net    Gregory Russell Elizabeth Russell   56  262-404-2252

輸出看起來像

[['4', 'Diane', 'Evans', 'F', 'diane.evans@yahoo.com', 'Jason', 'Evans', 'Michelle', 'Evans', 90, '215-793-6791'], 
['2', 'Brenda', 'Robinson', 'F', 'brenda.robinson@gmail.com', 'Raymond', 'Robinson', 'Judy', 'Robinson', 80, '225-945-4954'], 
['3', 'Joe', 'Robinson', 'M', 'joe.robinson@gmail.com', 'Scott', 'Robinson', 'Stephanie', 'Robinson', 70, '219-904-2161'], 
['5', 'Benjamin', 'Russell', 'M', 'benjamin.russell@charter.net', 'Gregory', 'Russell', 'Elizabeth', 'Russell', 56, '262-404-2252'], 
['1', 'Lois', 'Walker', 'F', 'lois.walker@hotmail.com', 'Donald', 'Walker', 'Helen', 'Walker', 40, '303-572-8492']]

試試熊貓

df = pd.read_csv("your_file", sep='xx', 
              names = ["x", "y", "z", "marks"])

df.sort_values('marks')

print(df)

你可以試試

import csv
with open('input.csv', newline='') as csvfile:
    rdr = csv.reader(csvfile)
    l = sorted(rdr, key=lambda x: x[6], reverse=True)

csv.reader()用於創建一個閱讀器對象,該對象使用sorted()進行sorted()其中reverse=True用於降序排序以獲得列表。

此列表可用於使用類似以下命令的輸出csv

with open('output.csv', 'w') as csvout:
    wrtr = csv.writer(csvout)
    wrtr.writerows(l)

輸出的csv文件將類似於

4,Diane   Evans,F,diane.evans@yahoo.com,Jason Evans,Michelle Evans,90,215-793-6791
2,Brenda  Robinson,F,brenda.robinson@gmail.com,Raymond Robinson,Judy Robinson,80,225-945-4954
3,Joe Robinson,M,joe.robinson@gmail.com,Scott Robinson,Stephanie Robinson,70,219-904-2161
5,Benjamin    Russell,M,benjamin.russell@charter.net,Gregory Russell,Elizabeth Russell,56,262-404-2252
1,Lois  Walker,F,lois.walker@hotmail.com,Donald Walker,Helen Walker,40,303-572-8492

由於您正在從文件對象中讀取數據,因此為了安全起見,請將newline參數指定為''

正如文檔所說:

如果csvfile是文件對象,則應使用newline =''將其打開。

文檔

如果未指定newline ='',則嵌入引號中的換行符將無法正確解釋,並且在使用\\ r \\ n linendings的平台上將添加額外的\\ r。 由於csv模塊會執行自己的(通用)換行符處理,因此指定newline =''應該總是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM