csv Python Pandas重复标题行并增加文件大小

mm5n2pyu  于 2023-05-26  发布在  Python
关注(0)|答案(1)|浏览(214)

我正在编写一个工具,它将从API中提取数据并将其保存为CSV。我想每天运行此程序并更新我的CSV,删除重复项。目前,数据被提取和存储的罚款,但我有两个问题。

  • 在我的数据中有一个重复的标题行,它没有被drop_duplicates()删除
  • 如果我删除data.csv文件并运行该工具两次,那么data.csv文件的大小会改变~ 5,000 kb,我不知道为什么

下面是相关代码。

def fetch_data_from_api(self):
        resource_dump_data = ""
        for idx, resource in enumerate(self.package["result"]["resources"]):
            if resource["datastore_active"]:
                url = self.base_url + "/datastore/dump/" + resource["id"]
                resource_dump_data += requests.get(url).text  
        return pd.read_csv(io.StringIO(resource_dump_data))
    

    def load_data_to_main(self, new_data):
        if os.path.isfile(self.CSV_FILE_PATH):
            existing_data = pd.read_csv(self.CSV_FILE_PATH)
            new_entries = pd.concat([existing_data, new_data])
        else:
            new_entries = new_data

        new_entries = new_entries.drop_duplicates()
        new_entries.to_csv(self.CSV_FILE_PATH, index=False)

def main():
    extract=Extract()
    new_data = extract.fetch_data_from_api()
    extract.load_data_to_main(new_data)
    print("Complete!")

if __name__ == "__main__":
    main()

下图显示了文件大小的更改和重复的标题行:
https://i.stack.imgur.com/alyBL.png)(https://i.stack.imgur.com/7oGT9.png)(https://i.stack.imgur.com/FrPhP.png

piah890a

piah890a1#

它看起来像1)fetch_data_from_API返回一个从csv文件读取的pandas Dataframe ,2)这个新数据被传递到load_data_to_main(),在那里它与现有的pandas Dataframe (它本身是从csv文件读取的)连接在一起。连接这两个 Dataframe (如果它们具有正确的报头)应该只产生一个报头。因此,我的猜测是,两个 Dataframe (existing_data或new_data)中的一个在读入时必须已经具有重复的标题行。如果是这样,运行“删除重复项”不会删除重复的标题,因为它将被视为常规行(不同于所有其他行)。
API转储是否复制了csv数据转储中的标头?
如果是这样的话,你可以尝试阅读所有没有头的csv文件(header=None),然后我相信删除重复文件将导致只有一个头。

相关问题