Python 如何比较现有excel文件中的dict数据
如何将字典格式的数据与现有的xlsx文件进行比较。 字典键与excel标题相同。比较的简单方法是什么? 以下是一个例子: Dict中的数据:Python 如何比较现有excel文件中的dict数据,python,pandas,dictionary,xlrd,Python,Pandas,Dictionary,Xlrd,如何将字典格式的数据与现有的xlsx文件进行比较。 字典键与excel标题相同。比较的简单方法是什么? 以下是一个例子: Dict中的数据: {'Sheet1': [{'ID': 1.0, 'NAME': 'hostname1', 'IP_ADDRESS': '192.168.1.1', 'STATUS': 'completed'}, {'ID': 2.0, 'NAME': 'hostname2', 'IP_ADDRESS': '192.168.1.2', 'STATUS': 'complete
{'Sheet1': [{'ID': 1.0, 'NAME': 'hostname1', 'IP_ADDRESS': '192.168.1.1', 'STATUS': 'completed'}, {'ID': 2.0, 'NAME': 'hostname2', 'IP_ADDRESS': '192.168.1.2', 'STATUS': 'completed'}, {'ID': 3.0, 'NAME': 'hostname3', 'IP_ADDRESS': '192.168.1.3', 'STATUS': 'in_progress'}, {'ID': 4.0, 'NAME': 'hostname4', 'IP_ADDRESS': '192.168.1.4', 'STATUS': 'completed'}]}
Excel文件:
我想将dict值与excel文件(通过工作表)进行比较,如果dict中的值不同,请更新excel文件。如果该条目在excel中不存在,只需在excel中添加新条目
我该怎么开始?比较、更新和扩展excel文件表中的新条目。谢谢
#####更新
首先,将字典转换为数据帧
import pandas as pd
data = {'ID': 1.0, 'NAME': 'hostname1', 'IP_ADDRESS': '192.168.1.1', 'STATUS': 'completed'}, {'ID': 2.0, 'NAME': 'hostname2', 'IP_ADDRESS': '192.168.1.2', 'STATUS': 'completed'}, {'ID': 3.0, 'NAME': 'hostname3', 'IP_ADDRESS': '192.168.1.3', 'STATUS': 'in_progress'}, {'ID': 4.0, 'NAME': 'hostname4', 'IP_ADDRESS': '192.168.1.4', 'STATUS': 'completed'}
df1 = pd.DataFrame.from_dict(data)
df1
# output
ID NAME IP_ADDRESS STATUS
0 1 hostname1 192.168.1.1 completed
1 2 hostname2 192.168.1.2 completed
2 3 hostname3 192.168.1.3 in_progress
3 4 hostname4 192.168.1.4 completed
然后将xlsx文件读取到另一个数据帧。假设excel文件中少了一个数据
df2 = pd.read_csv('filename')
df2
# output
ID NAME IP_ADDRESS STATUS
0 1 hostname1 192.168.1.1 completed
1 2 hostname2 192.168.1.2 completed
2 3 hostname3 192.168.1.3 NaN
df3.to_csv('filename')
现在使用combine\u first()
函数进行检查
df3 = df2.combine_first(df1)
df3
# output
ID NAME IP_ADDRESS STATUS
0 1 hostname1 192.168.1.1 completed
1 2 hostname2 192.168.1.2 completed
2 3 hostname3 192.168.1.3 in_progress
3 4 hostname4 192.168.1.4 completed
比较所有内容后,可以将其保存到excel文件中
df2 = pd.read_csv('filename')
df2
# output
ID NAME IP_ADDRESS STATUS
0 1 hostname1 192.168.1.1 completed
1 2 hostname2 192.168.1.2 completed
2 3 hostname3 192.168.1.3 NaN
df3.to_csv('filename')
谢谢,看起来很简单,将
转换为_csv()
转换回.xlsx
?在同一张工作表中?创建另一张工作表,是否可以使用现有工作表更新数据?dict数据是否与excel工作表相同,我不想触摸excel工作表。如何检查?感谢您无法直接比较excel文件和dict数据,但在将两者转换为数据帧后,您可以检查示例中的df1.equals(df2)
它将生成True
或False
谢谢,我已经更新了代码。你认为代码有什么问题吗?