从Pandas数据帧中获取字符串的行和列

时间:2018-02-27 19:59:00

标签: python pandas dataframe

我有一个唯一字符串的数据框,我想找到给定字符串的行和列。我想要这些值,因为我最终会将此数据框导出到Excel电子表格中。到目前为止,我发现获取这些值的最简单方法是:

jnames = list(df.iloc[0].to_frame().index)
for i in jnames:
    for k in df[i]:
        if 'searchstring' in str(k):
            print('Column: {}'.format( (jnames.index(i) + 1 ) ) )
            print('Row: {}'.format( list( df[i] ).index('searchstring') ) )
            break

任何人都可以建议一个能够更好地利用熊猫固有能力的解决方案吗?

4 个答案:

答案 0 :(得分:1)

如果没有可重现的代码/数据,我将构建一个数据框并显示一种简单的方法:

<强>设置

import pandas as pd, numpy as np

df = pd.DataFrame([['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'b']])

数据框如下所示:

   0  1  2
0  a  b  c
1  d  e  f
2  g  h  b 

<强>解决方案

result = list(zip(*np.where(df.values == 'b')))

<强>结果

[(0, 1), (2, 2)]

<强>解释

  • df.values访问数据框底层的numpy数组。
  • np.where创建一个满足所提供条件的坐标数组。
  • zip(*...)[x-coords-array, y-coords-array]转换为(x, y)坐标对。

答案 1 :(得分:0)

尝试使用contains。这将返回包含您要查找的切片的行的数据框。

df[df['<my_col>'].str.contains('<my_string_slice>')]

同样,您可以使用match进行直接匹配。

答案 2 :(得分:0)

这是我的方法,不写双循环:

value_to_search = "c"
print(df[[x for x in df.columns if value_to_search in df[x].unique()]].index[0])
print(df[[x for x in df.columns if value_to_search in df[x].unique()]].columns[0])

第一个将返回列名,第二个将返回索引。组合在一起,您将获得索引列组合。由于您提到df中的所有值都是唯一的,因此两行都只返回一个值。

您可能需要尝试 - 除非value_to_search可能不在数据框中。

答案 3 :(得分:0)

通过使用堆栈,来自jpp的数据

{{1}}