Python 如果行中包含某个值,则删除该行

Python 如果行中包含某个值,则删除该行,python,pandas,Python,Pandas,我有这个文本文件: LEU,LEID,PPP,YYY,LEO '1','2','3','4','5' '2','1','2','3','4' '2','AA','','','' 我想删除LEID='1'所在的行 import pandas as pd import os originalFile=os.path.abspath("D:\\python\\test\\OriginalFile.csv") df = pd.read_csv(originalFile) df = df[(df[

我有这个文本文件:

LEU,LEID,PPP,YYY,LEO
'1','2','3','4','5'
'2','1','2','3','4'
'2','AA','','',''
我想删除LEID='1'所在的行

import pandas as pd
import os

originalFile=os.path.abspath("D:\\python\\test\\OriginalFile.csv")

df = pd.read_csv(originalFile)

df = df[(df['LEID'] !='1')]

df.to_csv('D:\\python\\test\\CorrectedFile.csv')

print (df)

为什么LEID='1'的行没有被删除?

df[(df['LEID']!='1')]
在列上选择。您需要
df.loc[df['LEID']!='1']

正如您所拥有的,引号字符仍然包含在您的数据帧中。它可能看起来像:

>>> df
   LEU  LEID  PPP  YYY  LEO
0  '1'   '2'  '3'  '4'  '5'
1  '2'   '1'  '2'  '3'  '4'
2  '2'  'AA'   ''   ''   ''
因此,您实际上需要在过滤器中包含这些引号。您可以这样做:

df[df['LEID'] != "'1'"]
# or:
df[df['LEID'] !='\'1\'']

   LEU  LEID  PPP  YYY  LEO
0  '1'   '2'  '3'  '4'  '5'
2  '2'  'AA'   ''   ''   ''
另一种方法是在阅读csv时删除单引号:

df = pd.read_csv(originalFile, sep=',', quotechar="'")
您将获得以下数据帧:

>>> df
   LEU LEID  PPP  YYY  LEO
0    1    2  3.0  4.0  5.0
1    2    1  2.0  3.0  4.0
2    2   AA  NaN  NaN  NaN
您可以像尝试过的那样对其进行筛选:

df[df['LEID' ]!= '1']

   LEU LEID  PPP  YYY  LEO
0    1    2  3.0  4.0  5.0
2    2   AA  NaN  NaN  NaN

在正常情况下,您提供的两种方法对于大多数应用程序都是等效的,但我认为这不是OP问题的根源。我相信这与引号字符有关。非常感谢你的帮助。这很奇怪,因为我尝试在导入之前删除引号,但由于某些原因,我仍然没有成功。