[英]How to overwrite a particular column of a csv file using pandas or normal python?
[英]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.