Python 如何在数据帧中搜索部分字符串并使用Pandas返回特定单元格?
我有一个带有非标准列的数据框(一路上都不是相同的信息)。我想搜索一个特定的短语,该短语可能出现在行的某一列中,也可能不出现在该列中,然后返回后续单元格的值。例如:Python 如何在数据帧中搜索部分字符串并使用Pandas返回特定单元格?,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我有一个带有非标准列的数据框(一路上都不是相同的信息)。我想搜索一个特定的短语,该短语可能出现在行的某一列中,也可能不出现在该列中,然后返回后续单元格的值。例如: A B C How many? 5 Blah blah Blah How many? 7 How many? 13 Blah Blah Blah
A B C
How many? 5 Blah blah
Blah How many? 7
How many? 13 Blah
Blah Blah Blah
我正在尝试找出如何搜索短语“多少?”然后在下一个单元格中返回值(5/7/13/null)使用布尔值和
shift
df[df.eq('How many?').shift(1,axis=1).fillna(False)]
Out[142]:
A B C
0 NaN 5 NaN
1 NaN NaN 7
2 NaN 13 NaN
3 NaN NaN NaN
更新
s1=df.eq('How many?').shift(1,axis=1).fillna(False)
s2=df.eq('How many?')
df[s1|s2]
Out[154]:
A B C
0 How many? 5 NaN
1 NaN How many? 7
2 How many? 13 NaN
3 NaN NaN NaN
使用布尔和
shift
df[df.eq('How many?').shift(1,axis=1).fillna(False)]
Out[142]:
A B C
0 NaN 5 NaN
1 NaN NaN 7
2 NaN 13 NaN
3 NaN NaN NaN
更新
s1=df.eq('How many?').shift(1,axis=1).fillna(False)
s2=df.eq('How many?')
df[s1|s2]
Out[154]:
A B C
0 How many? 5 NaN
1 NaN How many? 7
2 How many? 13 NaN
3 NaN NaN NaN
使用
numpy
array可简化索引:
mask = df.values == 'How many?'
your_list = [df.values[i, j+1] for i, j in zip(*np.where(mask)) if j < df.values.shape[1]-1]
# yourlist = ['5', '7', '13']
mask=df.values==“多少?”
如果j
使用numpy
数组,以便于索引:
mask = df.values == 'How many?'
your_list = [df.values[i, j+1] for i, j in zip(*np.where(mask)) if j < df.values.shape[1]-1]
# yourlist = ['5', '7', '13']
mask=df.values==“多少?”
如果j
你说的“下一个单元格”是什么意思?右边的一个单元格?是的,我基本上是在尝试搜索一个短语,如果找到了,然后返回该单元格和它右边的单元格(在我的数据集中总是“值”)。我的数据集中有很多垃圾,所以我只想返回这两个项目,并转储行中的所有其他内容。你说的“下一个单元格”是什么意思?右边的一个单元格?是的,我基本上是在尝试搜索一个短语,如果找到了,然后返回该单元格和它右边的单元格(在我的数据集中总是“值”)。我的数据集中有很多垃圾,所以我只想返回这两个项目,并转储行中的所有其他内容。@Alex yep,Fixed这太完美了,谢谢!对python/pandas来说还是相当陌生的,不知道如何转换。我假设你调用shift时的1是将单元格1返回到右边?有没有一种简单的方法可以同时返回带有搜索词的手机和那个手机?@Alex yep,Fixed这太完美了,谢谢!对python/pandas来说还是相当陌生的,不知道如何转换。我假设你调用shift时的1是将单元格1返回到右边?“有没有一种简单的方法可以同时返回带有搜索词的单元格和该单元格?”Alex修复。缺少一个*
运算符。@Alex已修复。错过了一个*
操作员。