使用 pandas,我如何在我的列包含列表的位置定位一个值?
Using pandas, how do i loc a value where my column contains lists?
我有一个 df,有一列包含一个列表。
例如 -
df = pd.DataFrame({'name': ['name1', 'name2', 'name3', 'name4'],
'age': [21, 23, 24, 28],
'occupation': ['data scientist', 'doctor', 'data analyst', 'engineer'],
'knowledge':[['python','c++'], ['python', 'c#'], ['css','js','html'], ['c#']],
})
现在,我只想定位带有 'python' 作为列表中 'knowledge' 值之一的行。
我该怎么做?
我试过:pd.loc[(pd['knowledge'].isin['python'])] 但没成功
(编辑以修复代码)
您需要使用循环:
df[['python' in l for l in df['knowledge']]]
输出:
name age occupation knowledge
0 name1 21 data scientist [python, c++]
1 name2 23 doctor [python, c#]
备选方案
查找集合中的任意元素
保留至少有一个匹配项的行
search = set(['python', 'js'])
df[[bool(search.intersection(l)) for l in df['knowledge']]]
输出:
name age occupation knowledge
0 name1 21 data scientist [python, c++]
1 name2 23 doctor [python, c#]
2 name3 24 data analyst [css, js, html]
匹配一个集合的所有元素
所有元素都需要匹配
search = set(['python', 'c++'])
df[[search <= set(l) for l in df['knowledge']]]
输出:
name age occupation knowledge
0 name1 21 data scientist [python, c++]
您可以尝试将列表加入 space 分隔值,然后发现它包含您想要的带词边界的词。
m = df['knowledge'].str.join(' ').str.contains(r'\bpython\b')
或者你可以试试Series.apply
m = df['knowledge'].apply(lambda l: 'python' in l)
print(m)
0 True
1 True
2 False
3 False
Name: knowledge, dtype: bool
使用布尔索引对 select True
行
print(df[m])
name age occupation knowledge
0 name1 21 data scientist [python, c++]
1 name2 23 doctor [python, c#]
我有一个 df,有一列包含一个列表。 例如 -
df = pd.DataFrame({'name': ['name1', 'name2', 'name3', 'name4'],
'age': [21, 23, 24, 28],
'occupation': ['data scientist', 'doctor', 'data analyst', 'engineer'],
'knowledge':[['python','c++'], ['python', 'c#'], ['css','js','html'], ['c#']],
})
现在,我只想定位带有 'python' 作为列表中 'knowledge' 值之一的行。 我该怎么做?
我试过:pd.loc[(pd['knowledge'].isin['python'])] 但没成功
(编辑以修复代码)
您需要使用循环:
df[['python' in l for l in df['knowledge']]]
输出:
name age occupation knowledge
0 name1 21 data scientist [python, c++]
1 name2 23 doctor [python, c#]
备选方案
查找集合中的任意元素
保留至少有一个匹配项的行
search = set(['python', 'js'])
df[[bool(search.intersection(l)) for l in df['knowledge']]]
输出:
name age occupation knowledge
0 name1 21 data scientist [python, c++]
1 name2 23 doctor [python, c#]
2 name3 24 data analyst [css, js, html]
匹配一个集合的所有元素
所有元素都需要匹配
search = set(['python', 'c++'])
df[[search <= set(l) for l in df['knowledge']]]
输出:
name age occupation knowledge
0 name1 21 data scientist [python, c++]
您可以尝试将列表加入 space 分隔值,然后发现它包含您想要的带词边界的词。
m = df['knowledge'].str.join(' ').str.contains(r'\bpython\b')
或者你可以试试Series.apply
m = df['knowledge'].apply(lambda l: 'python' in l)
print(m)
0 True
1 True
2 False
3 False
Name: knowledge, dtype: bool
使用布尔索引对 select True
行
print(df[m])
name age occupation knowledge
0 name1 21 data scientist [python, c++]
1 name2 23 doctor [python, c#]