如何识别pandas列是列表

问题描述 投票:0回答:2

我想确定 pandas 中的列是否是列表(每行)。

df=pd.DataFrame({'X': [1, 2, 3], 'Y': [[34],[37,45],[48,50,57]],'Z':['A','B','C']})

df
Out[160]: 
   X             Y  Z
0  1          [34]  A
1  2      [37, 45]  B
2  3  [48, 50, 57]  C

df.dtypes
Out[161]: 
X     int64
Y    object
Z    object
dtype: object

由于字符串的数据类型是“对象”,因此我无法区分字符串列和列表(整数或字符串)。

如何识别“Y”列是一个 int 列表?

python pandas numpy dataframe
2个回答
17
投票

您可以使用 [

map
[(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.map.html) (或
applymap
for pandas 版本之前) 2.1.0),比较然后添加
all
以检查所有值是否都是
True
s:

print (df.map(type))
               X               Y              Z
0  <class 'int'>  <class 'list'>  <class 'str'>
1  <class 'int'>  <class 'list'>  <class 'str'>
2  <class 'int'>  <class 'list'>  <class 'str'>

a = (df.map(type) == list).all()
print (a)
X    False
Y     True
Z    False
dtype: bool

或者:

a = df.map(lambda x: isinstance(x, list)).all()
print (a)
X    False
Y     True
Z    False
dtype: bool

如果需要列列表:

L = a.index[a].tolist()
print (L)
['Y']

如果想检查

dtypes
(但
strings
list
dict
object
):

print (df.dtypes)
X     int64
Y    object
Z    object
dtype: object

a = df.dtypes == 'int64'
print (a)
X     True
Y    False
Z    False
dtype: bool

4
投票

如果您的数据集很大,您应该在应用 type 函数之前采样,然后您可以检查:

如果最常见的类型是list

df\
.sample(100)\
.applymap(type)\
.mode(0)\
.astype(str) == "<class 'list'>"

如果所有值都是列表

(df\
.sample(100)\
.applymap(type)\
.astype(str) == "<class 'list'>")\
.all(0)

如果有任何值是 list:

(df\
.sample(100)\
.applymap(type)\
.astype(str) == "<class 'list'>")\
.any(0)
© www.soinside.com 2019 - 2024. All rights reserved.