首页 > 解决方案 > 如何检查数据框是否包含列表或字典

问题描述

我有一个数据框:

col1   col2   col3       col4   
A     11    [{'id':2}]    {"price": 0.0}
B     21    [{'id':3}]    {"price": 2.0}
C     31    [{'id':4}]    {"price": 3.0}

我想找出所有列的数据类型为“列表”和“字典”,并可能将结果存储到另一个列表中。我该怎么做?

当我使用这个时: data.applymap(type).apply(pd.value_counts) 输出是:

col1  col2        col3            col4
0    a    11  [{'id':2}]  {"price": 0.0}
1    b    21  [{'id':3}]  {"price": 2.0}
2    c    31  [{'id':4}]  {"price": 3.0}

标签: python-3.xpandaslistdataframedictionary

解决方案


国际大学联合会,

我们可以使用ast 标准库中的applyandliteral_eval来构建字典:

出于性能原因,让我们使用数据帧的第一行,因为apply计算量很大。

from ast import literal_eval
data_dict = {}
for col in df.columns:
    try:
        col_type = df[col].iloc[:1].apply(literal_eval).apply(type)[0]
        data_dict[col] = col_type
    except (ValueError,SyntaxError):
        data_dict[col] = 'unable to evaluate'

print(data_dict)

{'col1': 'unable to evaluate',
 'col2': 'unable to evaluate',
 'col3': list,
 'col4': dict}

推荐阅读