如何根据两个条件过滤csv文件中的特定行? (使用熊猫)

时间:2018-04-01 05:08:27

标签: python pandas csv conditional

我的数据框基本上如下所示:(其中df = pd.read_csv(csv_file_name))

    'Acid'  'Ion'  'File Name'    'Area'
0    'Cholic' '390'  'sth-E-1.raw'  '594'
1    'Cholic' '392'  'sth-E-2.raw'  '630'
2    'Cholic' '388'  'sth-E-3.raw'  '710'
3    'Cholic' '330'  'sth-E-1.raw'  '700'
4    'Cholic' '340'  'sth-E-2.raw'  '690'
5    '7alpha' '729'  'sth-E-1.raw'  '109'
6    '7alpha' '745'  'sth-E-1.raw'  '115

我想只打印包含'Cholic'作为名称的行,并在文件名中包含'E-1.raw'

到目前为止,我只考虑过这样的打印声明:

print(df[(df['Acid'] == 'Cholic') & ('E-1.raw' in df['File Name']))

1 个答案:

答案 0 :(得分:2)

你需要 -

df[(df['Acid'] == 'Cholic') & (df['File Name'].str.contains('E-1.raw')]

<强>输出

     Acid  Ion    File_Name  Area
0  Cholic  390  sth-E-1.raw   594
3  Cholic  330  sth-E-1.raw   700

<强>解释

您的代码的问题特别是在这种情况下 -

'E-1.raw' in df['File Name']

这将返回一个真值,无论字符串'E-1.raw'是否存在于完整系列df['File Name']中。它只会产生一个True/False值,这不是你想要的。

您希望在df['File Name']中过滤掉中的每个字符串,无论它是否逐行包含'E-1.raw',您可以通过将系列转换为{{{首先,然后使用str函数。