我的目标是在查询完整的用户名/电子邮件信息后,从包含用户名/ ipaddress或电子邮件/ ipaddress组合的csv文件合并列。这似乎是一个基本的内部连接,但不是从查询输出到CSV文件,需要结合工作根据数据框中的列合并两个excel文件VLookup样式
example row in original file:
username email ip address
NaN [email protected] 69.0.1.127
Wilco NaN 69.0.12.128
例如行:
username email branch
roger1 [email protected] Los Angelas
Wilco [email protected] Montreal
预期输出:
username email branch ipaddress
roger1 [email protected] Los Angelas 69.0.1.127
Wilco [email protected] Montreal 69.0.12.128
第一这个程序的一部分是从IP地址的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()
查询构建逻辑这里<>
转换电子邮件上和其他的语法为下一步
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)
这给了我,我从需要的用户列表的SQL查询在程序中第一个excel工作表..所有其他行可以被忽略 ,除了在这个数据框输出的用户名/电子邮件。从第二csv文件
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')
重命名列投其所好,在原来的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')
我不能在瞬间打印数据,因为我没有访问数据库,但是可以在如果有人有任何想法稍后
同样的目标是输出相匹配的ip地址有两种电子邮件 或用户名列出,但不能同时