我的目标是在查询完整的用户名/电子邮件信息后合并包含用户名/ ipaddress或email / ipaddress组合的csv文件中的列。这似乎是一个基本的内部联接但不起作用
example row in original file:
username email ip address
NaN user@user.com 69.0.1.127
Wilco NaN 69.0.12.128
从查询输出到需要组合的csv文件的示例行:
username email branch
roger1 user@user.com Los Angelas
Wilco user2@user.com Montreal
预期产出:
username email branch ipaddress
roger1 user@user.com Los Angelas 69.0.1.127
Wilco user2@user.com Montreal 69.0.12.128
该程序的第一部分是从具有用户名或电子邮件的ip address excel表中收集数据 填写,但不是两个...所有这一切是在这张表和最后结合用户名电子邮件和ipaddress 表格已创建。
directory variable = dirname
all_data = pd.DataFrame()
emailList=[]
userList = []
print "Dirname is " + dirname
#loop over excel sheets and create email and user strings to use for query
for f in glob.glob(dirname+"/Book1.xlsx"):
df=pd.read_excel(f)
all_data = all_data.append(df,ignore_index=True)
all_data = all_data.append(df,ignore_index=True)
emailList = all_data.dropna(subset=["email"])
userList = all_data.dropna(subset=["user"])
userList = userList["user"].tolist()
emailList = emailList["email"].tolist()
userList = map(int,userList)
userList = ','.join(map(str,userList))
emailList = "', '".join(map(str, emailList))
emailList = "'" + emailList.upper() + "'"
all_data['email'] = all_data['email'].str.upper()
在此处查询构建逻辑<>
将电子邮件转换为上层和其他语法,以便进行下一步的SQL查询
con=cx_Oracle.connect("*************")
print "connection successful"
df_ora = pd.read_sql(queryStringEmail,con)
df_ora2 = pd.read_sql(queryStringUserList, con)
frames = [df_ora,df_ora2]
con.close()
newtable = pd.concat(frames)
这为我提供了程序中第一个excel表所需的用户列表。所有其他行都可以忽略 除了此数据框中的用户名/电子邮件输出。
nt = newtable.drop_duplicates(keep='last')
nt.to_csv("newcsv.csv", index=False, encoding='utf-8')
print "Operation successful"
从第二个csv文件中删除重复项,因为多个相同的用户名/电子邮件/分支组合无用
这里有很多意大利面条代码,我道歉,但这就是逻辑模糊的地方
for f in glob.glob(dirname+"/newcsv.csv"):
aa=pd.read_csv(f)
all_data.to_csv("newcsvALLDATA.csv", index=False, encoding='utf-8')
aa.to_csv("newcsvALLDATA2.csv", index=False, encoding='utf-8')
重命名新csv文件中的列以匹配原始IP地址csv中的列(实际上只是电子邮件和用户)
aa.columns = ['user','email','first name','last name', 'branch', 'location']
print all_data
print aa
这是我尝试过所有组合并失败的地方:
all_data =
all_data.merge(aa,left_index=True,right_index=True,left_on="IP",how='inner')
print all_data
all_data.to_csv("newcsv2.csv", index=False, encoding='utf-8')
aa.to_excel(writer, sheet_name = 'x2')
我目前无法打印数据,因为我无法访问数据库,但如果有人有任何想法,可以在以后显示
再次目标是输出一个csv文件,其中包含与ipaddress csv匹配的用户名/电子邮件组合,其中包含一封电子邮件 列出的用户名或用户名
答案 0 :(得分:1)
以后任何人都会遇到这个问题,我用以下代码解决了这个问题
aa.columns = ['user','email','first name','last name', 'provID', 'provName']
print aa
all_dataMerge = pd.merge(aa,all_data, on='user', suffixes=['1','2'])
合并发生在1个键上的两个表之间,但它在逻辑上处理。简单的回答让我永远想通了。希望这可以帮助将来的某个人。
#Logic to combine the dataframes into final form, similar to VLookup
data_final = all_dataMerge.drop_duplicates(keep='first')