如何检查列表的每个项目pandas列是否都是int?

我有一个熊猫列表。我需要检查这些列表中的每个项目是否都是整数。


对于常规列表,我可以使用


all(isinstance(x, int) for x in lst)

对于常规的熊猫专栏,我可以检查它们是否都是整数


df.loc[~df['Field1'].str.isdigit(), 'Field1']

但是如果列的每一行都包含一个列表呢?


编辑:


他是一个最小可重现的例子


A = np.random.randint(0,40,20)                                      

B = [np.random.randint(0,40,k) for k in np.random.randint(2,20,20)]


A32 = A.astype(np.int32)


from itertools import chain


sizes = np.fromiter(chain((0,),map(len,B)),np.int32,len(B)+1)

boundaries = sizes.cumsum()


# force int32

B_all = np.empty(boundaries[-1],np.int32)

B32 = np.split(B_all, boundaries[1:-1])

df = pd.DataFrame([A32, B32]).T

df[1] = df[1].apply(lambda x: x.tolist() )

df.columns = ['a', 'b']

df.at[10,'b'] = [ 3, 5, 2, 1, 'a', 4, 4]


慕姐4208626
浏览 334回答 3
3回答

Qyouu

您可以使用apply当前列表检查:import pandas as pdimport random# create random dfx = [{'A': [random.randint(0,300) for i in range(10)]} for i in range(10)]df = pd.DataFrame(x)df.A.apply(lambda x: all(isinstance(y, int) for y in x))0    True1    True2    True3    True4    True5    True6    True7    True8    True9    True# add non-int rowx = [{'A': [random.randint(0,300) for i in range(10)]} for i in range(10)] + [{'A':[chr(a) for a in range(100,120)]}]df = pd.DataFrame(x)df.A.apply(lambda x: all(isinstance(y, int) for y in x))0      True1      True2      True3      True4      True5      True6      True7      True8      True9      True10    FalseName: A, dtype: bool

三国纷争

创建一个函数并应用它应该可以工作:def check_list(lst):    return all(isinstance(x, int) for x in lst)df['is_all_ints'] = df['Field1'].apply(check_list)

HUWWW

callable你可以像这样传递一个.loc:df = pd.DataFrame({    "a": [[1, 2, 3], [1, 1, 1], [3, 2, 1], [1, 2, "a"]],    "b": ["a", "b", "c", "d"]})df.loc[    lambda df: df["a"].apply(        lambda lst: all(isinstance(item, int) for item in lst)    )]结果:           a  b0  [1, 2, 3]  a1  [1, 1, 1]  b2  [3, 2, 1]  c
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python