我正在编写一个工具,它将从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)
1条答案
按热度按时间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),然后我相信删除重复文件将导致只有一个头。