Pandas -与excel相比,Vlookup存在差异



下午好,

我想在两个数据帧之间做一个vlookup,以便它们可以为以后的任务进行pivot。excel中的公式非常简单可靠。

=VLOOKUP(F2,$CU$2:$CV$2501,2,FALSE)

但是当尝试使用python时,似乎会在某处导致错误,并且生成比预期多几百条记录。

我要做的是查看marketing_event_id,看看它是否出现在详细信息表中,如果它匹配,则在新列中返回SrcCode。

rmNulls = pd.read_csv (r"File1.csv", converters={'marketing_event_id': lambda x: str(x)})
rmNulls['marketing_event_id'] = rmNulls['marketing_event_id'].replace('',0, inplace = True)
rmNulls["marketing_event_id"] = rmNulls["marketing_event_id"].astype(str)

details = pd.read_excel(r"DetailAttr.xlsx", "Details", dtype=str)
#Isolating the 2 required cols
refDetails = details[['SrcCode','New Minor Cat']].copy()
#Recasting code as str for merge
refDetails ["SrcCode"] = refDetails ["SrcCode"].astype(str)
print("Vlookup in Progress")
df3 = pd.merge(rmNulls,
refDetails ,
left_on= "marketing_event_id",
right_on ='SrcCode',
how ='left')
with pd.ExcelWriter('DW 150622.xlsx', date_format='DD-MM-YYYY', datetime_format='DD-MM-YYYY' ) as writer:
df3.to_excel(writer)

我使用另一个名为date_value的列来过滤数据透视表,在excel中执行数据透视,结果是381,而pandas返回475。我觉得这与我的合并函数的格式有关,但即使在使用它之后,它仍然抛出比预期更大的数字。

当我操纵df rmNulls时,我已经逐步完成了代码,就在合并之前,我可以在excel中pivot它以给出正确的数字,所以我不相信日期字段在这一点上是罪魁祸首。

是我错过了一个技巧,还是我尝试的方式根本就有问题?

任何帮助都将是非常感激的。

问候,瑞安

您是否在一个或两个dataframe中重复了多个id ?merge相当于SQL中的JOIN。相反,VLOOKUP在找到的第一个值之后检索值。

|Foo|Bar|    |Foo|Baz|
|---+---|    |---+---|
| 1 | a |    | 1 | x |
| 2 | b |    | 1 | y |

。如果在第一个表的左侧添加第三列,使用VLOOKUP查找Baz,您将最终拥有2行。

|Foo|Bar|Baz|
|---+---+---|
| 1 | a | x |
| 2 | b |   |

如果你做pd.merge(left=FooBar, right=FooBaz, how='left', on='Foo'),结果是

|Foo|Bar|Baz|
|---+---+---|
| 1 | a | x |
| 1 | a | y |
| 2 | b |   |

在将两个数据集导入到df中之后,我运行了以下几行:

rmNulls = pd.read_csv (r"File1.csv", dtype=str)
details= pd.read_excel(r"File2.xlsx", "Details", dtype=str)
refinedD = details[["SrcCode","New Minor Cat"]]
new_df = refinedD.drop_duplicates(subset='SrcCode')
df3 = pd.merge(rmNulls,new_df,left_on= "marketing_event_id",right_on ='SrcCode',how ='left', validate='m:1').drop_duplicates()

由于某种原因,df中出现了重复项,这些重复项应该是唯一的,并且在查看它时应该是唯一的。

这是一个很好的教训,假设你被告知的数据符合一定的标准,仍然应该彻底检查,以证明这是正确的,无论你开始遇到错误。

谢谢你给我指正确的方向。

问候,瑞安

相关内容

最新更新