excel - 使用 Python 从 excel-2 中的值更新 excel-1 中的缺失值
问题描述
我有 2 个 Excel 表,其中包含序列号列表以及购买日期。表 1 是主表,表 2 可以称为该主表的子集。
并非 Sheet-1 中的所有序列号都更新为购买日期。在 Sheet-2 中有那些序列号在 Sheet-1 中缺少其购买日期值。Sheet-2 完全更新了其序列号和购买日期值。
我正在尝试从 Sheet-1 中读取所有序列号,在 Sheet-2 中搜索这些序列号,找到相应的购买日期并在 Sheet-1 中更新此值(如果缺少)。
以下是两张表格的布局:(请注意,两张表格中的列名略有不同)
表 1
Serial# Date of purchase
111 01-Jun-2018
222 13-Jan-2018
333 (Blank)
444 (Blank)
555 11-Dec-2017
表 2
Serial Number purchase date
333 03-Feb-2019
444 19-Feb-2019
我是 Pandas 的新手,第一次尝试使用 Pandas 制作 Python 脚本来实现这一点。这是我设法编写但无法正常工作的代码。
import xlrd
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
df1 = pd.read_excel('Excel-1.xlsx', sheet_name='Sheet1')
df2 = pd.read_excel('Excel-2.xlsx', sheet_name='Sheet1')
df1['Date of purchase'] = df1['Serial#'].map(df2.set_index('Serial Number')['purchase date'])
错误
pandas.core.indexes.base.InvalidIndexError:重新索引仅对唯一值索引对象有效
编辑:
- 两张表都有数百个条目,我提到的布局只是一个示例。
- 除了示例布局中列出的 2 个之外,这两个工作表还有其他列,提到的 2 个是我们感兴趣的。
解决方案
假设您的输入数据是:
In [1]: import pandas as pd
In [2]: sheet1=pd.DataFrame([[111,'01-Jun-2018'],[222,'13-Jan-2018'],[333],[444],[555,'11-Dec-2017']], columns=['Serial#','Date of purchase'])
In [3]: sheet1
Out[3]:
Serial# Date of purchase
0 111 01-Jun-2018
1 222 13-Jan-2018
2 333 None
3 444 None
4 555 11-Dec-2017
In [4]: sheet2=pd.DataFrame([[333,'03-Feb-2019'],[444,'19-Feb-2019']],columns=sheet1.columns)
In [5]: sheet2
Out[5]:
Serial# Date of purchase
0 333 03-Feb-2019
1 444 19-Feb-2019
In [6]: sheet1.set_index('Serial#')
In [7]: sheet1['Date of purchase'].fillna(sheet2.set_index('Serial#')['Date of purchase'], inplace=True)
In [8]:
Out[8]:
Date of purchase
Serial#
111 01-Jun-2018
222 13-Jan-2018
333 03-Feb-2019
444 19-Feb-2019
555 11-Dec-2017
推荐阅读
- ruby-on-rails - 正确提交参数时验证失败
- java - 引起:java.lang.IllegalArgumentException:未知实体:xxx
- mysql - MySQL:启用 LOAD DATA LOCAL INFILE 重置
- angular - 如何在 Angular Unviersal 项目的服务器上进行预渲染?
- azure - 没有免费/共享服务计划的选项
- python - 动态构建字典时的Python“关键错误”(动态)
- r - 如何动态访问数据框列表中的特定属性
- amazon-web-services - 将 CloudFront 分配与 Route 53 域相关联时出现问题
- android - 应用程序更新后,预加载应用程序的 android 清单“persistent=true”是否仍然适用?
- linux - 我需要一个 linux 脚本来报告日志文件中的所有错误行,并将错误行的结果导出到 .csv 文件中?