簡體   English   中英

從 Pandas 數據框中獲取字符串的行和列

[英]Getting the row and column of a string from a 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

任何人都可以提出一個更好地利用熊貓固有功能的解決方案嗎?

沒有可重現的代碼/數據,我將組成一個數據框並展示一種簡單的方法:

設置

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)坐標對。

嘗試使用contains 這將返回一個包含您要查找的切片的行數據框。

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

同樣,您可以使用match進行直接匹配。

這是我不寫雙循環的方法:

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可能不在數據框中,您可能需要嘗試除外。

通過使用堆棧,來自 jpp 的數據

df[df=='b'].stack()
Out[211]: 
0  1    b
2  2    b
dtype: object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM