【发布时间】:2019-07-04 04:39:52
【问题描述】:
我正在开展一个项目,该项目将对拥有计算机帐户的员工进行审计。我想打印一个包含两个新列的数据框。这与 Comparing Columns in Dataframes 问题不同,因为我正在使用字符串。我还需要做一些模糊逻辑,但那是进一步的。
我收到的数据在 Excel 表格中。它来自两个我无法控制的来源,因此我将它们格式化为 [First Name, Last Name] 并将它们打印到控制台以确保我正在使用的数据是正确的。我将 .xls 转换为 .csv 文件,格式化信息,并能够在具有两列的单个数据框中输出两个名称列表,但无法将我想要的值放在最后两列中。我使用了查询(返回真/假,而不是名称)、差异和正则表达式。我认为我只是错误地使用了这些工具。
import pandas as pd
nd = {'col1': ["Abraham Hansen","Demetrius McMahon","Hilary
Emerson","Amelia H. Hayden","Abraham Oliver"],
'col2': ["Abraham Hansen","Abe Oliver","Hillary Emerson","DJ
McMahon","Amelia H. Hayden"]}
info = pd.DataFrame(data=nd)
for row in info:
if info.col1.value not in info.col2:
info["Need Account"] = info.col1.value
if info.col2.value not in info.col1:
info["Delete Account"] = info.col2.value
print(info)
我想要一个包含 2 列的新数据框:需要帐户和删除帐户,并根据数据框中的其他列填写适当的值。在这种情况下,我收到“系列”没有属性“值”的错误。 这是我的预期输出示例:
df_out:
Need Account Delete Account
Demetrius McMahon Abe Oliver
Abraham Oliver Hillary Emerson
Hilary Emerson DJ McMahon
从这个列表中,我可以查看出现了谁的昵称,然后从那里减少列表。
【问题讨论】:
-
样本数据的预期输出是什么?
-
我不认为
for row in info正在做你认为的那样。尝试将循环的内容更改为for row in infor: print(row)以检查输出。 -
预期的输出是增加了两列,需要帐户和删除帐户。我将用预期的输出更新问题