根据来自另一个csv的单元格内容从csv删除行

时间:2018-09-22 09:35:55

标签: python pandas dataframe

我正在从csv抓取URL列表,并从每个URL中提取数据帧信息,并将其导出到csv。当它到达没有任何信息的页面时,它将停止。我想从我从第二个文件中收集的许可证号中删除我已经抓取的第一个文件的URL(它们包含许可证号)。我可以通过使用助手列在excel中轻松完成此操作,但不知道如何使用熊猫来完成此操作。

例如: 我想基于文件2中的Lic#删除文件1中的前2行(URL)。

#include <SoftwareSerial.h>
#define ADD_TAG_CODE "000736087" //change this ID with your own card TAG
#define DEL_TAG_CODE "000555859" //change this ID with your own card 

SoftwareSerial mySerial(2, 3); // RX, TX
String msg;
String ID ; //string to store allowed cards

void setup()
{
Serial.begin(9600);
Serial.println("Serial Ready");

mySerial.begin(9600);
Serial.println("RFID Ready");
}

char c;

void loop(){

while(mySerial.available()>0){
c=mySerial.read();
msg += c;
Serial.println(msg); //Uncomment to view your tag ID
Serial.println(msg.length());
}
msg=msg.substring(1,13);
if(msg.indexOf(ADD_TAG_CODE)>=0) add();
else if(msg.indexOf(DEL_TAG_CODE)>=0) del();
else if(msg.length()>10) verifica();
msg="";

}

void add(){
Serial.print("What TAG do you wanna grant access?: ");
msg="";
while(msg.length()<13){
while(mySerial.available()>0){
c=mySerial.read();
msg += c;
}
}
if(ID.indexOf(msg)>=0) {
Serial.println("\nAccess already granted for this card.");
msg="";
}
else{
Serial.print("Card: ");
Serial.println(msg);
ID += msg;
ID += ",";
//Serial.print("ID: ");
//Serial.println(ID);
msg="";
Serial.println("Access granted for this card.");
}

}

void del(){
msg="";
Serial.print("What TAG do you wanna deny access?: ");
while(msg.length()<13){
while(mySerial.available()>0){
c=mySerial.read();
msg += c;
}
}
msg=msg.substring(1,13);
if(ID.indexOf(msg)>=0){
Serial.println(msg);
Serial.println("TAG found. Access for this card denied.");
//ID.replace(card,"");
int pos=ID.indexOf(msg);
msg="";
msg += ID.substring(0,pos);
msg += ID.substring(pos+15,ID.length());
ID="";
ID += msg;
//Serial.print("ID: ");
//Serial.println(ID);
} else Serial.println("\nTAG not found or already denied");
msg="";
}

void verifica(){
msg=msg.substring(1,13);
if(ID.indexOf(msg)>=0) Serial.println("Access granted.");
else
Serial.println("Access denied.");
} 

我在这里查看了许多示例,但无法将其包裹起来。

我感谢任何评论和/或建议。

3 个答案:

答案 0 :(得分:1)

在x和一个变量中存储2个列表:

x=['www.1234.com','www.1235.com','www.1236.com']
a=['1234','1235']

附加www。和.com移至第二个列表,并存储在变量b

b=[]
for i in a:
    b.append('www.'+i+'.com')

创建所需的输出

y = [s for s in x if s not in b]
y

答案 1 :(得分:0)

首先,创建一个仅包含url中间部分的新列

df1['site'] = dfs['dataset1'].apply(lambda x:x.split('.')[1])

然后,内部连接两个数据框

df = df1.merge(df2,how='inner',left_on='site',right_on='dataset2')

df包含所需的输出。 (我假设dataset1和dataset2是列名)

答案 2 :(得分:0)

如果两者都是大尺寸的不同数据框,则可以使用join或通过迭代进行检查 df

df
    File1(no headers)
0   www.1234.com
1   www.1235.com
2   www.1236.com

df1
    File2(LIC# is the header)
0   1234
1   1235

df = df[~df['File1(no headers)'].apply(lambda y: any(map(lambda x :str(x) in y,df1['File2(LIC# is the header)'].tolist())))].reset_index(drop=True)

出局:

    File1(no headers)
0   www.1236.com