python按条件删除行_根据python中另一个标签文件中的条件从标签文件中删除行

1586010002-jmsa.png

He llo I have two tab file such as :

file1.txt

Clustername Seqname1 Seqname2

Cluster1 Seq1(+) SeqA

Cluster1 Seq2(-) SeqA

Cluster1 Seq3(+) SeqB

Cluster1 Seq300(+) SeqB

Cluster1 Seq90(+) SeqL

Cluster1 Seq90(+) SeqO

Cluster1 Seq2(-) SeqC

Cluster2 Seq8(-) SeqY

Cluster2 Seq8(-) SeqH

Cluster2 Seq8(-) SeqP

Cluster2 Seq79(-) SeqY

Cluster3 Seq10(+) SeqK

Cluster3 Seq10(+) SeqS

Cluster3 Seq10(+) SeqT

Cluster4 Seq300(+) SeqB

file2.txt

Clustername Names

Cluster1 SeqA

Cluster1 Seq1(+)

Cluster1 SeqC

Cluster1 Seq2(-)

Cluster1 SeqO

Cluster1 Seq3(+)

Cluster1 Seq90(+)

Cluster1 SeqB

Cluster1 SeqG

Cluster2 Seq8(-)

Cluster2 SeqY

Cluster2 SeqH

Cluster3 Seq10(+)

Cluster3 SeqK

Cluster4 SeqB

Cluster4 Seq300(+)

as you can see in file2.txt SeqL is not present in the Cluster1, then I want to remove the line :

Cluster1 Seq90(+) SeqL from the file1.txt

Seq300(+) is not present either in Cluster1, then I remove the line:

Cluster1 Seq300(+) SeqB

from the file1.txt

Same for:

Cluster2 Seq8(-) SeqP

Cluster2 Seq79(-) SeqY

there is no SeqP in CLuster2 nor Seq79(-) in Cluster2 in file2.txt, then I remove lines:

Cluster2 Seq8(-) SeqP

Cluster2 Seq79(-) SeqY

from the file1.txt

Same for:

Cluster3 Seq10(+) SeqS

Cluster3 Seq10(+) SeqT

because SeqS and SeqT are not in Cluster2 in file2.txt, then I remove the two following lines from the file1.txt:

Cluster3 Seq10(+) SeqS

Cluster3 Seq10(+) SeqT

at the end I should get an ex file1.txt such as:

Clustername Seqname1 Seqname2

Cluster1 Seq1(+) SeqA

Cluster1 Seq2(-) SeqA

Cluster1 Seq3(+) SeqB

Cluster1 Seq90(+) SeqO

Cluster1 Seq2(-) SeqC

Cluster2 Seq8(-) SeqY

Cluster2 Seq8(-) SeqH

Cluster3 Seq10(+) SeqK

Cluster4 Seq300(+) SeqB

解决方案

Use DataFrame.merge + DataFrame.reindex to get the original columns:

new_df=( df1.merge(df2,left_on=['Clustername','Seqname1'],right_on=['Clustername','Names'])

.merge(df2,left_on=['Clustername','Seqname2'],right_on=['Clustername','Names'])

.reindex(columns=df1.columns))

print(new_df)

Output

Clustername Seqname1 Seqname2

0 Cluster1 Seq1(+) SeqA

1 Cluster1 Seq2(-) SeqA

2 Cluster1 Seq2(-) SeqC

3 Cluster1 Seq3(+) SeqB

4 Cluster1 Seq90(+) SeqO

5 Cluster2 Seq8(-) SeqY

6 Cluster2 Seq8(-) SeqH

7 Cluster3 Seq10(+) SeqK

8 Cluster4 Seq300(+) SeqB

Solution for n seqnames columns:

df1['aux']=df1.groupby('Clustername').cumcount()

new_df= ( df1.melt(['Clustername','aux'],var_name='Seq')

.merge(df2,left_on=['Clustername','value'],right_on=['Clustername','Names'])

.groupby(['Clustername','aux'])

.filter(lambda x: x.value.size>=(len(df1.columns)-2))

.pivot_table(index=['Clustername','aux'],columns='Seq',values='value',aggfunc=''.join)

.reset_index()

.drop('aux',axis=1)

.rename_axis(columns=None) )

print(new_df)

Output

Clustername Seqname1 Seqname2

0 Cluster1 Seq1(+) SeqA

1 Cluster1 Seq2(-) SeqA

2 Cluster1 Seq3(+) SeqB

3 Cluster1 Seq90(+) SeqO

4 Cluster1 Seq2(-) SeqC

5 Cluster2 Seq8(-) SeqY

6 Cluster2 Seq8(-) SeqH

7 Cluster3 Seq10(+) SeqK

8 Cluster4 Seq300(+) SeqB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 假设你已经使用Python的csv模块读取了CSV文件,可以通过以下步骤来删除包含"####"的一: 1. 创建一个空列表,用于存储不包含"####"的数据。 2. 使用csv模块的reader函数逐读取CSV文件的数据。 3. 遍历读取的每一数据,如果该不包含"####",则将其添加到上一步创建的列表。 4. 写入不包含"####"的数据到新的CSV文件。 以下是一个示例代码: ```python import csv # 打开原始CSV文件和新的CSV文件 with open('original.csv', 'r', newline='') as csv_file, \ open('new.csv', 'w', newline='') as new_file: # 创建CSV读写对象 reader = csv.reader(csv_file) writer = csv.writer(new_file) # 创建空列表存储不包含"####"的数据 rows = [] # 逐读取CSV文件的数据,过滤包含"####"的 for row in reader: if "####" not in row: rows.append(row) # 将不包含"####"的数据写入新的CSV文件 writer.writerows(rows) ``` 在上面的代码,我们通过使用with语句打开了原始CSV文件和新的CSV文件,并分别创建了CSV读写对象。接着,我们使用reader函数逐读取CSV文件的数据,并使用一个循环遍历读取的每一数据,如果该不包含"####",则将其添加到上一步创建的空列表。最后,我们使用writerows函数将不包含"####"的数据写入新的CSV文件。 ### 回答2: 在Python,可以使用`pandas`库来处理CSV文件,并删除的内容。 首先,我们需要导入`pandas`库: ``` import pandas as pd ``` 接下来,我们可以使用`read_csv`函数将CSV文件读入一个`DataFrame`对象: ``` df = pd.read_csv('example.csv') ``` 然后,我们可以使用`drop`方法删除的指定或列。如果要删除,可以通过指定的索引或标签的方式进操作: ``` df.drop([0, 1], inplace=True) ``` 上述代码会删除第一和第二。 如果要删除列,可以通过指定列的标签的方式进操作: ``` df.drop(['列名'], axis=1, inplace=True) ``` 上述代码会删除名为"列名"的列。 最后,我们可以使用`to_csv`方法将修改后的`DataFrame`对象重新写入CSV文件: ``` df.to_csv('new_example.csv', index=False) ``` 注意,如需保留原文件,请用一个新的文件名。 综上所述,以上是在Python删除CSV表内容的一种方法。请注意备份原文件并谨慎操作以避免数据丢失。 ### 回答3: 在 Python 删除 CSV 表的内容可以通过以下几个步骤完成: 1. 首先,使用 `csv` 模块打开 CSV 文件。可以使用 `open` 函数来打开文件,并指定打开模式为读写模式('r+')。 ```python import csv with open('file.csv', 'r+') as file: ... ``` 2. 接下来,使用 `csv.reader` 函数创建一个 CSV 读取器对象,以读取 CSV 文件的内容。可以将打开的文件对象作为参数传递给 `csv.reader` 函数。 ```python reader = csv.reader(file) ``` 3. 在读取器对象上使用 `list` 函数,将 CSV 表的内容转化为一个列表。 ```python data = list(reader) ``` 4. 然后,使用切片操作或者循环遍历等方法找到要删除的内容所在的。假设要删除第三,可以使用以下代码: ```python del data[2] ``` 5. 最后,将修改后的数据重新写入 CSV 文件。可以使用 `csv.writer` 函数创建一个 CSV 写入器对象,以将修改后的数据写入到 CSV 文件。同样地,将打开的文件对象作为参数传递给 `csv.writer` 函数。 ```python writer = csv.writer(file) for row in data: writer.writerow(row) ``` 完整的示例代码如下所示: ```python import csv with open('file.csv', 'r+') as file: reader = csv.reader(file) data = list(reader) # 删除第三 del data[2] # 写入修改后的数据 writer = csv.writer(file) for row in data: writer.writerow(row) ``` 以上代码将会删除 CSV 表的第三,并将修改后的数据写入到原始的 CSV 文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值