Python 3.x 如何根据使用python复制的键值比较csv文件中某列的值
我有一个包含两列的.csv文件:Python 3.x 如何根据使用python复制的键值比较csv文件中某列的值,python-3.x,csv,Python 3.x,Csv,我有一个包含两列的.csv文件: Item Value A 1.3 B 2.6 D 4.2 E 5.6 F 3.2 A 1.2 C 5.2 D 6.4 我想比较列项中的值并找到重复项,然后我想比较列值中相应的值。 在示例中,项目A和D是重复的,但它们的值不同。我想清除重复项并保存值最低的项 这正是我尝试过的,它是有效的,但它速度慢,资源昂贵。我相信有更好的方法,我可以用熊猫馆或其他图书馆来做这件事,所以请给我一个建议 file="file.csv" def
Item Value
A 1.3
B 2.6
D 4.2
E 5.6
F 3.2
A 1.2
C 5.2
D 6.4
我想比较列项中的值并找到重复项,然后我想比较列值中相应的值。
在示例中,项目A和D是重复的,但它们的值不同。我想清除重复项并保存值最低的项
这正是我尝试过的,它是有效的,但它速度慢,资源昂贵。我相信有更好的方法,我可以用熊猫馆或其他图书馆来做这件事,所以请给我一个建议
file="file.csv"
def items_array(file):
with open(file,"r") as file:
file_reader=csv.DictReader(file,delimiter=";")
for row in file_reader:
items.append(row["Item_title"])
items_set=set(items)
return(items_set)
def find_lowest_value(item,file):
items_and_values=[]
with open(file,"r") as file:
file_reader=csv.DictReader(file,delimiter=";")
for row in file_reader:
items_and_values.append([row["Item"],row["Value"]])
value_for_single_item=[]
for i in items_and_values:
if item == i[0]:
value_for_single_item.append(i[1])
value_for_single_item.sort()
return(value_for_single_item[0])
items=items_array(file)
for i in items:
lv=find_lowest_value(i,file)
print(i,lv)
由于实际.csv文件中的行数约为25k,使用我使用的方法大约需要30分钟。我相信这可以做得更快更聪明:)
这是预期的结果:
Item Value
B 2.6
D 4.2
E 5.6
F 3.2
A 1.2
C 5.2
如果使用Pandas将csv导入数据帧,则无需读取文件25k,只需读取一次。而且会快得多
df=pd.read_csv(file,sep=";")
a=df.groupby("Item")["Value"].min()
基本上就是这样。两行代码,耗时2秒。熊猫一定是某种魔法