首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在python中使用.csv按特定列数据排序

在python中使用.csv按特定列数据排序
EN

Stack Overflow用户
提问于 2013-03-22 07:02:33
回答 3查看 20.9K关注 0票数 8

我正在尝试对一个仅有300多个条目的.csv文件进行排序,并将其全部输出,按方言下某一特定列中的数值排序。以下是我到目前为止编写的代码,但它似乎只是按原样输出数据

代码语言:javascript
代码运行次数:0
运行
复制
import csv
import itertools
from itertools import groupby as gb

reader = csv.DictReader(open('Full_List.csv', 'r'))

groups = gb(reader, lambda d: d['red label'])
result = [max(g, key=lambda d: d['red label']) for k, g in groups]



writer = csv.DictWriter(open('output.csv', 'w'), reader.fieldnames)
writer.writeheader()
writer.writerows(result)

整个文件中只有50行包含方言“红色标签”下的值,其他所有行都留空。它在.csv的Z列中(但不是最后一个),所以我假设该列的索引是25(0是第一个)。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-22 09:54:26

使用pandas怎么样?

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
df = pd.read_csv('Full_List.csv')
df = df.sort('red label')
df.to_csv('Full_List_sorted.csv', index=False)

您可能需要将选项调整为read_csvto_csv,以匹配CSV文件的格式。

票数 10
EN

Stack Overflow用户

发布于 2013-03-22 07:21:03

groupby不是用来排序的,它是用来分块迭代的。对于排序,请使用sorted

代码语言:javascript
代码运行次数:0
运行
复制
import csv

reader = csv.DictReader(open('Full_List.csv', 'r'))
result = sorted(reader, key=lambda d: float(d['red label']))

writer = csv.DictWriter(open('output.csv', 'w'), reader.fieldnames)
writer.writeheader()
writer.writerows(result)

注意:我更改了lambda,将字符数据转换为浮点型,以便进行正确的数字排序。

票数 7
EN

Stack Overflow用户

发布于 2014-01-17 02:00:49

通过测试,我发现以下内容适用于我拥有的csv文件。请注意,该列的所有行都具有有效条目。

代码语言:javascript
代码运行次数:0
运行
复制
from optparse import OptionParser
# Create options.statistic using -s
# Open and set up input file
ifile = open(options.filein, 'rb')
reader = cvs.DictReader(ifile)
# Create the sorted list
try:
  print 'Try the float version'
  sortedlist = sorted(reader, key = lambda d: float(d[options.statistic]), reverse=options.high)
except ValueError:
  print 'Need to use the text version'
  ifile.seek(0)
  ifile.next()
  sortedlist = sorted(reader, key=lambda d: d[options.statistic], reverse=options.high)
# Close the input file. This allows the input file to be the same as the output file
ifile.close()
# Open the output file
ofile = open(options.fileout, 'wb')
writer = csv.DictWriter(ofile, fieldnames=outfields, extrasactions='ignore', restval = '')
# Output the header
writer.writerow(dict((fn, fn) for fn in outfields))
# Output the sorted list
writer.writerows(sortedlist)
ofile.close()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15559812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档