簡體   English   中英

如何使用 Pandas 訪問列中的特定行

[英]How to access a specific row in a column using Pandas

伙計們!

我在使用 Pandas 開發儀表板時卡住了。 這是場景:

我正在導入和轉換 CSV 文件,以便了解我正在與之合作的團隊。

|ID      |Area Path                             | 
|--------|--------------------------------------|
| 544    | [Level 1, Level 2, Level 3]          |
| 545    | [Level 1, Level 2]                   |
| 546    | [Level 1]                            |
| 547    | [Level 1, Level 2, Level 3, Level 4] | 

如您所見, Area Path列沒有模式。 有時我會找到一個包含 1 或 2 或 3 或 4 個項目的列表。

為了訪問此列中的每一行以獲取我需要的信息,我遇到了一個問題。 如果列表只有一項,我必須使用[0] position,如果列表有2個或更多項目,我必須使用[1] position。

我嘗試做不同的事情,下面這個是我最后一次嘗試:

def Extract(lst):
    if dados['Area Path'].str.len() == 1:
      return [item[0] for item in dados['Area Path']]
    elif dados['Area Path'].str.len() == 2:
      return [item[-1] for item in dados['Area Path']]
    elif dados['Area Path'].str.len() == 3:
      return [item[1] for item in dados['Area Path']]
    elif dados['Area Path'].str.len() == 4:
      return [item[1] for item in dados['Area Path']]

lst = [dados['Area Path']]
indice_novo = Extract(lst)
dados['Team'] = indice_novo

問題是我無法遍歷作為列的列表。 .str.len()提供的 output 很棒,但它並不能完全幫助我。

你能幫我解決這個問題嗎?

謝謝,馬塞洛

這是使用map()的解決方案

df['Area Path'].map(lambda x: x[0] if len(x) == 1 else x[1])

Output:

0    Level 2
1    Level 2
2    Level 1
3    Level 2
Name: Area Path, dtype: object

根據您的評論, Area Path列包含列表。 如果是這樣,您訪問的列不正確。 訪問列中列表的正確方法是:

lst = dados['Area Path'].tolist()

這將使用列表列表填充lst變量,如下所示:

[['Level 1', 'Level 2', 'Level 3'], ['Level 1', 'Level 2'], ['Level 1'], ...]

然后,在您的 Extract() function 中,您可以根據所需的邏輯執行過濾:

def Extract(list_of_lists):
    new_list = []
    for lst in list_of_lists:
        # Will fail if 'Area Path' contains None, NaN values
        if len(lst) == 1:
            new_list.append(lst[0])
        else:
            new_list.append(lst[1])
    return new_list

indice_novo = Extract(lst)
dados['Team'] = indice_novo

此答案基於您的代碼,可能不是最優化的方法。

暫無
暫無

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

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