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问题的根源。我相信这与引号字符有关。非常感谢你的帮助。这很奇怪,因为我尝试在导入之前删除引号,但由于某些原因,我仍然没有成功。