如何根据两个条件过滤 csv 文件中的特定行? (使用 pandas)
How do I filter specific rows in a csv file based on two conditions? (using pandas)
我的数据框基本上是这样的:(where 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']))
你需要 -
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']
这个 returns 一个真值是否字符串 'E-1.raw'
出现在整个系列 df['File Name']
中。它只会产生一个 True/False
值,这不是您想要的值。
您想逐行过滤掉 df['File Name']
中的 each 字符串是否包含 'E-1.raw'
,您可以通过转换首先作为 str
系列,然后使用 contains
函数。
我的数据框基本上是这样的:(where 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']))
你需要 -
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']
这个 returns 一个真值是否字符串 'E-1.raw'
出现在整个系列 df['File Name']
中。它只会产生一个 True/False
值,这不是您想要的值。
您想逐行过滤掉 df['File Name']
中的 each 字符串是否包含 'E-1.raw'
,您可以通过转换首先作为 str
系列,然后使用 contains
函数。