按美元金额对 csv 列进行排序,然后删除重复项

Posted

技术标签:

【中文标题】按美元金额对 csv 列进行排序,然后删除重复项【英文标题】:Sorting csv column by dollar amount then removing duplicates 【发布时间】:2021-09-01 15:53:28 【问题描述】:

我有一个 csv 文件,如下所示:

我已经阅读了几乎所有关于此的其他主题,但无法弄清楚。 我需要读入文件,将收入列从高到低排序,然后删除任何重复的县,因为同一个县可能处于不同的州。

import csv
import operator

reader = csv.reader(open("data.csv"))
sorted_list = sorted(reader, key=(operator.itemgetter(10)), reverse=True)


with open("high_county_spend.csv", "w") as f:
  csv.writer(f).writerows(sorted_list)

我试过这个:

sorted_list = sorted(reader, key=int(operator.itemgetter(10).split("$")), reverse=True)

但是operator.itemgetter 没有split() 属性。

【问题讨论】:

【参考方案1】:

正如 It_is_Chris 所述,pandas 库可能是可取的,但要回答您的问题:

import operator
reader = ['$10', '$20', '$5']

sorted(reader, key=lambda x: int(x.split("$")[-1]), reverse=True)


Out[204]: ['$20', '$10', '$5']

问题是operator.itemgetter(n) 需要一个可迭代对象(例如列表),但您提供了一个整数。

【讨论】:

【参考方案2】:

使用pandas

import pandas as pd

# read data
df = pd.read_csv('data.csv')
# convert the string column to an int
df['income'] = df['income'].str.strip('$').astype(int) # or float if there are decimals .astype(float)
# sort values and drop duplicates
new_df = df.sort_values('income', ascending=False).drop_duplicates(keep='first')

【讨论】:

以上是关于按美元金额对 csv 列进行排序,然后删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

在python中按大小对csv文件进行多列排序

Bash:按前 4 列对 csv 文件进行排序

按 ID 对核心数据进行排序 [重复]

按两个字段对 Python 列表进行排序

Python:按“列”对列表进行排序[重复]

MS Access 报告排序