我的数据框基本上如下所示:(其中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']))
答案 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
函数。