如何使用Pandas访问列中的特定行

beq87vna  于 2023-05-21  发布在  其他
关注(0)|答案(2)|浏览(100)

我在使用Pandas开发 Jmeter 板时被卡住了。这是一个场景:
我正在导入和转换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]位置,如果列表有2个或更多项目,我必须使用[1]位置。
我试过做不同的事情,下面这一个是我的最后一次尝试:

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()提供的输出很棒,但并没有完全帮助我。
你能帮我解决这个问题吗?
谢谢,马塞洛

oxosxuxt

oxosxuxt1#

下面是使用map()的解决方案

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

df['Area Path'].str[:2].str[-1]

输出:

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

bnlyeluc2#

根据您的注解,Area Path列包含列表。如果是这样,则您访问列的方式不正确。访问列中列表的正确方法是:

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

这将用列表的列表填充lst变量,看起来像这样:

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

然后,在Extract()函数中,您可以根据所需的逻辑执行过滤:

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

这个答案基于您的代码,可能不是最优化的方法。

相关问题