Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从一个excel工作表中查找另一个excel工作表中的值并打印结果_Python_Python 3.x_Excel - Fatal编程技术网

使用Python从一个excel工作表中查找另一个excel工作表中的值并打印结果

使用Python从一个excel工作表中查找另一个excel工作表中的值并打印结果,python,python-3.x,excel,Python,Python 3.x,Excel,我有两个电子表格“Old_Data”和“New_Data”,它们都包含一个名为“ID”的列,它们可以有10K+个条目,并且它们都没有按顺序排列。也就是说,ID“1001”可能在“旧数据”的第2行,但在“新数据”的第4500行 “新_数据”中也有不在“旧_数据”中的条目,反之亦然。现在,我正试图弄清楚如何使用Python从“Old_Data”中获取每个条目,并尝试在“New_Data”中定位它,然后在“Old_Data”中添加一个名为“find”的字段/列,根据它是否定位,加上一个true或fal

我有两个电子表格“Old_Data”和“New_Data”,它们都包含一个名为“ID”的列,它们可以有10K+个条目,并且它们都没有按顺序排列。也就是说,ID“1001”可能在“旧数据”的第2行,但在“新数据”的第4500行

“新_数据”中也有不在“旧_数据”中的条目,反之亦然。现在,我正试图弄清楚如何使用Python从“Old_Data”中获取每个条目,并尝试在“New_Data”中定位它,然后在“Old_Data”中添加一个名为“find”的字段/列,根据它是否定位,加上一个true或false

有没有关于我将如何开始这项工作的想法?我附上了“新数据”和“旧数据”excel表格的两个示例


您可以将两列读取到一个列表中

new_ids = list()
old_ids = list()
您必须填写这些列表,或者将excel转换为csv.file并使用input()/sys.stdin从中读取列表,或者使用openpyxl或类似模块

然后,假设所有这些ID都是唯一的元素:

old_d = dict(old_ids)

for id in old_ids: 
    pos = new_ids.index(id)
    old_d[id] = pos # position in the old list

    #or for simple existence:
    #old_d[id] = (id in new_ids) # just True / False

    #print(f'id {id} from new_ids is in old_ids at position {pos}')
在寻找职位的情况下:not found(未找到)将在您的字典中出现-1。 有一个位置可能比简单的存在性检查更有用


它基本上与Excels VLookup相同。

您可以将这两列读取到一个列表中

new_ids = list()
old_ids = list()
您必须填写这些列表,或者将excel转换为csv.file并使用input()/sys.stdin从中读取列表,或者使用openpyxl或类似模块

然后,假设所有这些ID都是唯一的元素:

old_d = dict(old_ids)

for id in old_ids: 
    pos = new_ids.index(id)
    old_d[id] = pos # position in the old list

    #or for simple existence:
    #old_d[id] = (id in new_ids) # just True / False

    #print(f'id {id} from new_ids is in old_ids at position {pos}')
在寻找职位的情况下:not found(未找到)将在您的字典中出现-1。 有一个位置可能比简单的存在性检查更有用


它与Excels VLookup基本相同。

检查此代码以及旧数据中的相应结果

import pandas as pd
import numpy as np
new_data = pd.read_excel('new_data.xlsx')
old_data = pd.read_excel('old_data.xlsx')
old_data['exists'] = np.nan
for each in list(old_data.loc[old_data.ID.isin(new_data['ID'])].index):
    old_data['exists'].iloc[each] = 'Exists'
old_data['exists'].fillna('non-existent', inplace=True)
print(old_data)

检查此代码以及旧数据中的相应结果

import pandas as pd
import numpy as np
new_data = pd.read_excel('new_data.xlsx')
old_data = pd.read_excel('old_data.xlsx')
old_data['exists'] = np.nan
for each in list(old_data.loc[old_data.ID.isin(new_data['ID'])].index):
    old_data['exists'].iloc[each] = 'Exists'
old_data['exists'].fillna('non-existent', inplace=True)
print(old_data)

嘿,谢谢你的帮助,它似乎可以工作,但我发现下面的错误,它不会更新excel工作表。然而,当它打印时,它似乎在寻找匹配项等<代码>警告(来自警告模块):文件“C:\Users\Ben\AppData\Local\Programs\Python\Python38-32\lib\site packages\pandas\core\index.py”,第671行self.\u setitem\u带索引器(索引器,值)SettingWithCopyWarning:试图在数据帧切片的副本上设置一个值这只是一个警告,您可以忽略:)为了更新工作表,您必须将内容写入工作表。感谢您的帮助,它似乎可以工作,但我得到以下错误,并且它不会更新excel工作表。然而,当它打印时,它似乎在寻找匹配项等<代码>警告(来自警告模块):文件“C:\Users\Ben\AppData\Local\Programs\Python\Python38-32\lib\site packages\pandas\core\index.py”,第671行self.\u setitem\u带索引器(索引器,值)SettingWithCopyWarning:试图在数据帧切片的副本上设置一个值这只是一个可以忽略的警告:),为了更新工作表,必须将内容写入工作表