![](/img/trans.png)
[英]How to manipulate data in a .csv file using Pandas and access specific row and column?
[英]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.