2017-09-25 104 views
1

我的目标是在查询完整的用户名/电子邮件信息后,从包含用户名/ 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地址有两种电子邮件 或用户名列出,但不能同时

回答

0

柜面有人运行到这个问题,在未来,我已经解决了CSV文件中的用户名/电子邮件连击csv文件它与以下代码

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') 
相关问题