Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果元素位于元组中,则选择DataFrame行_Python_Pandas_Tuples - Fatal编程技术网

Python 如果元素位于元组中,则选择DataFrame行

Python 如果元素位于元组中,则选择DataFrame行,python,pandas,tuples,Python,Pandas,Tuples,假设这是我的df A B 0 a (33,32) 1 b (44,33) 2 a 32 3 a (66,33) 4 b (77,34,12) 5 c (88,1,55) 其中,列B值是元组 我需要得到像df[df['B']33]这样的东西 A B 0 a (33,32) 1 b (44,33) 3 a (66,33) 有什么办法可以做到这一点吗?如果有混合数和元组,请首先将整数转换为元组: df['B'] = df['B'].a

假设这是我的df

   A     B
0  a  (33,32)
1  b  (44,33)
2  a  32
3  a  (66,33)
4  b  (77,34,12)
5  c  (88,1,55)
其中,列B值是元组 我需要得到像df[df['B']33]这样的东西

   A     B
0  a  (33,32)
1  b  (44,33)
3  a  (66,33)

有什么办法可以做到这一点吗?

如果有混合数和元组,请首先将整数转换为元组:

df['B'] = df['B'].apply(lambda x: x if isinstance(x, tuple) else (x,))
然后过滤元组中的值,如:

df = df[df.B.apply(lambda x: 33 in x)]
或:

或:



Thx@jezrael!但我得到了这个错误:“int”类型的参数不是iterable@Jeff-所以有带整数的混合元组吗?@Jeff-我认为
(32,)
(32)
?因为一个元素元组是用类似逗号的
(value,)
定义的,所以我刚刚意识到该列也有int,实际上该列是从另一个具有字符串值的列转换而来的,例如'33,32','33'。。。。等。使用文字评估。你有什么建议吗?@Jeff-这是碰巧的,首先我认为是打字错误,所以第一次编辑了这个问题;)
df = df[[33 in x for x in df.B]]
df = df[pd.DataFrame(df.B.tolist()).eq(33).any(axis=1)]
print (df)
   A         B
0  a  (33, 32)
1  b  (44, 33)
3  a  (66, 33)