我有一个像这样的pandas数据框:
值是字符串类型。我想知道这些行中是否包含字符串<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="1">
<option>Select 1</option>
<select>
<a href="javascript:;" id="change1">Change Select 1</a>
<br />
<br />
<select id="2">
<option>Select 2</option>
<select>
<a href="javascript:;" id="change2">Change Select 2</a>
。
所以我首先通过'63'
将每个字符串拆分为','
,这给了我这个:
因此每行现在都包含一个字符串列表。我接下来尝试通过df['col_name'].str.split(',')
来匹配字符串,但它给了我这个:
为什么呢? :(我希望所有行都说False,特别是对于包含值df['col_name'].str.split(',').str.contains('63')
的行。
答案 0 :(得分:1)
df = pd.DataFrame({'col_name': ['196', '107,63,229', '208,263']})
df['col_name'].str.split(',').apply(lambda numbers: '63' in numbers)
=>
0 False
1 True
2 False
Name: col_name, dtype: bool
建立您的开始,您只需使用apply并检查字符63
是否在您拨打split
的列表中?祝你好运!
以下是适用的pandas docs。
答案 1 :(得分:1)
您可以使用列表理解。
这是一个最小的例子。
import pandas as pd
df = pd.DataFrame({'A': [[196], [504], [63, 100], [35, 1], [63]]})
df2 = df[[63 in x for x in df['A']]]
# A
# 2 [63, 100]
# 4 [63]
这是有效的,因为列表推导产生了一个布尔列表。当然,这可以分配到df
:
df['Test'] = [63 in x for x in df['A']]
# A Test
# 0 [196] False
# 1 [504] False
# 2 [63, 100] True
# 3 [35, 1] False
# 4 [63] True
答案 2 :(得分:0)
我想说最简单的方法是拆分列然后应用匿名函数来检查你的值是否存在。
df['col_name'].str.split(',').apply(lambda x: "63" in x)
回答您关于为什么您的方法不起作用的问题 - 拆分操作的结果是包含列表值的系列。 str访问器显然是用于对字符串的操作,因此未定义使用拆分结果的str(理想情况下会引发TypeError)