按美元金额对 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 列进行排序,然后删除重复项的主要内容,如果未能解决你的问题,请参考以下文章