按列排序csv

ibps3vxo  于 2022-12-06  发布在  其他
关注(0)|答案(5)|浏览(151)

我想按日期对CSV表进行排序。一开始是一个简单的任务:

import sys
import csv

reader = csv.reader(open("files.csv"), delimiter=";")

for id, path, title, date, author, platform, type, port in reader:
    print date

我使用Python的CSV模块读入了一个具有该结构的文件:

id;file;description;date;author;platform;type;port
  • 日期是ISO-8601,因此我可以很容易地对它进行排序,而无需解析:2003年4月22日
  • 我想按日期排序,最新的条目排在最前面
  • 我怎样才能让这个阅读器进入一个可排序的数据结构呢?我想通过一些努力,我可以创建一个日期列表:datelist += date,split and sort.但是我必须重新识别CSV表中的完整条目.这不仅仅是对列表中的内容进行排序.
  • csv似乎没有内置排序功能

最好的解决方案是有一个CSV客户端,像数据库一样处理文件。
我希望有人知道一些很好的排序魔术在这里;)

toe95027

toe950271#

import operator
sortedlist = sorted(reader, key=operator.itemgetter(3), reverse=True)

或使用lambda

sortedlist = sorted(reader, key=lambda row: row[3], reverse=True)
8ljdwjyq

8ljdwjyq2#

MULTIPLE COLUMN排序(先按column_1排序,再按column_2排序)

with open('unsorted.csv',newline='') as csvfile:
    spamreader = csv.DictReader(csvfile, delimiter=";")
    sortedlist = sorted(spamreader, key=lambda row:(row['column_1'],row['column_2']), reverse=False)

with open('sorted.csv', 'w') as f:
    fieldnames = ['column_1', 'column_2', column_3]
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    for row in sortedlist:
        writer.writerow(row)
eqfvzcg8

eqfvzcg83#

读取器的作用就像一个生成器。在一个带有一些假数据的文件上:

>>> import sys, csv
>>> data = csv.reader(open('data.csv'),delimiter=';')
>>> data
<_csv.reader object at 0x1004a11a0>
>>> data.next()
['a', ' b', ' c']
>>> data.next()
['x', ' y', ' z']
>>> data.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

Ignacio所示使用运算符.itemgetter:

>>> data = csv.reader(open('data.csv'),delimiter=';')
>>> import operator
>>> sortedlist = sorted(data, key=operator.itemgetter(2), reverse=True)
>>> sortedlist
[['x', ' y', ' z'], ['a', ' b', ' c']]
xkftehaa

xkftehaa4#

对于按列对csv进行排序,我将使用类似于以下内容的代码

import pandas
csvData = pandas.read_csv('myfile.csv')
csvData.sort_values(["date"], axis=0, ascending=[False], inplace=True)
print(csvData)
rks48beu

rks48beu5#

你可以用Pandas来做,而且很容易

import pandas as pd
df = pd.read_csv("File.csv")
sorted_df = df.sort_values(by=["price","title",...], ascending=False)
sorted_df.to_csv('homes_sorted.csv', index=False)

sort_values方法返回一个新的 Dataframe ,因此确保将其分配给一个新变量。

相关问题