【发布时间】:2018-07-05 17:42:30
【问题描述】:
我在 python 中使用包 pandas 来处理和读写 Excel 电子表格。我创建了 2 个不同的数据框(df1 和 df2),它们的单元格都是数据类型字符串。 df1 有超过 50,000 行。 df1 的每一列中有很多单元格是“Nan”,我已经转换为一个字符串,上面写着“Empty”。 df2 有超过 9000 行。 “WHSE_Nbr”和“WHSE_Desc_HR”中的每一行都包含一个准确的字符串值。在 df2 的最后 2 列中,只有一些行具有字符串“Empty”以外的值。 df1 中的“仓库”列有许多单元格,其中包含只有单词的名称。我有兴趣识别的 df1 中“仓库”列的行是包含在“WHSE_Nbr”列中的 df2 中找到的任何仓库编号的行。
Example of dataframe1 - df1
Job Warehouse GeneralDescription Purpose
Empty AP Accounts Payable Accounting
Empty Empty Empty Empty
Empty Cyber Security GA Security & Compliance Data Security
Empty Merch|04-1854 Empty Empty
Empty WH -1925 Empty Empty
Empty Montreal-10 Empty Empty
Empty canada| 05-4325 Empty Empty
Example of dataframe2 - df2
WHSE_Nbr WHSE_Desc_HR WHSE_Desc_AD WHSE_Abrv
1 Technology Tech
2 Finance
... ...
10 Recruiting Campus Outreach
1854 Community Relations
... ...
1925 HumanResources
4325 Global People
9237 International Tech
dataframe2 示例 df2
所以我想遍历 df1 的“仓库列”的所有行,以搜索出现在 df2 的 WHSE_Nbr 列中的 WHSE 编号。在此示例中,我希望我的代码在 df1 的“仓库”列中找到 1854,并将该数字映射到 df2 的 WHSE_Desc_HR 列中的关联单元格,并在 df1 的“GeneralDescription”列中写入“社区关系”(到在 Warehouse 列中包含子字符串“1854”的同一行。它还会将“人力资源”写入仓库列中的同一行子字符串“1925”出现在仓库列中。当迭代达到“蒙特利尔 10”时,我想要我的将“Campus Outreach”写入 df1 的 GeneralDescription 列的代码,因为如果 df2 的 WHSE_Desc_AD 中有一个值,这将覆盖 df2 的“WHSE_Desc_HR”列中的内容。我已经对 pandas 足够熟悉,可以阅读excel文件(.xlsx)并制作数据框并更改数据框内的数据类型以用于迭代目的,查看数据框,但无法找出构建此代码以实现此目标的最有效和最有效的方法。我有编辑这个问题st 现在因为我意识到我遗漏了一些非常重要的东西。每当仓库列中出现一个数字时,我要匹配的数字总是跟在连字符或破折号 (-) 之后。所以在 df1 中,写着“canada | 05-4325”的 Warehouse 行应该识别 4325,将其与 df2 匹配,并将“Global People”写入 df1 中的 GeneralDescription 列。对不起大家。非常感谢您的帮助,下面的两个答案是一个很好的开始。谢谢
import pandas as pd
excel_file='/Users/cbri/anaconda3/WHSE_gen.xlsx'
df1 = pd.read_excel(excel_file, usecols [1,5,6,7])
excel_file='/Users/cbri/PycharmProjects/True_Dept/HR_excel.xlsx'
df2 = pd.read_excel(excel_file)
df1=df1.replace(np.nan, "Empty",regex=True)
df2=df2.replace(np.nan, "Empty",regex=True)
df1=pd.DataFrame(df1, dtype='str')
df2=pd.DataFrame(df2, dtype='str')
#yeah i need a push in the right direction, guess i should use ieriterms()?
for column in df1:
if (df1['Warehouse'])
#so i got as far as returning all records that contained the substring "1854" but obviously that's without the for and if statement above
df1[df1['Warehouse'].str.contains("1854", na=False)]
【问题讨论】:
-
请将您的数据框发布为文本,而不是图像
-
你忘了'if'语句的冒号吗?
-
是的,我确实做到了。谢谢
标签: python excel pandas dataframe string-search