比较两个csv文件,并创建一个与元素相同的新文件,但编译器报告我ValueError

2024-04-19 18:14:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始在一个项目中使用python,因此我为我的经验不足提前道歉。 我正在处理两个不同的csv文件,但它们都在一个公共字段中。csv文件包含关于一系列书籍的信息,大小不同。文件一有“描述”字段,文件二没有。统一文件的字段是“isbn”。我的目标是创建一个。包含具有相同isbn代码的书籍说明的csv文件。我的代码是:

import csv
import pandas as pd

dataset_description = '../dataset-books/dataset.csv'
books_mod = '../dataset-books/booksmod.csv'
output_file = '../dataset-books/newdataset.csv'
cols_to_remove = [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27]

cols_to_remove = sorted(cols_to_remove, reverse=True)
row_count = 0 # Current amount of rows processed

with open(dataset_description, "r", encoding='Latin1') as source,\
open(books_mod, 'r', encoding='Latin1') as source2:
reader = pd.read_csv(source, delimiter=',')
reader2 = pd.read_csv(source2, delimiter=',')
with open(output_file, "w", newline='', encoding='Latin1') as result:
    writer = csv.writer(result)
    for row, row2 in reader, reader2:
#row[19], row2[6] index column containing the code
        if row[19] == row2[6] and row_count != 10001:
            for col_index in cols_to_remove:
                del row[col_index]
            writer.writerow([row_count, row])
            row_count += 1
        else:
            break
source.close()
source2.close()
result.close()

我读取csv文件,定义要删除的列的索引,打开文件进行读取,打开一个文件进行写入,并尝试仅选择具有相同代码的行,然后删除其他行。最后我把所有的东西都写在一个文件里。在执行时,它会给我带来一个错误:“ValueError:要解包的值太多(预期为2)”。 请帮帮我


1条回答
网友
1楼 · 发布于 2024-04-19 18:14:58

使用pandas.merge()解决方案

确保“on”合并字段的数据类型相同。在本例中,ISBN已被读取为float64

import numpy as np df3=pd.read_csv("text.csv",dtype={'isbn': np.float64})
import pandas as pd
f1=pd.DataFrame({"isbn":[1,2,3,5],"Authors":['A','B','C','D']})
f2=pd.DataFrame({"isbn":[2,3,5],"Description":["Book two","Book Three","Book 4"]})
df=pd.merge(f1,f2,on=['isbn'],indicator=True)

相关问题 更多 >