如何使用apply、map或applymap在pandas数据框中查找每一行和每一列的数据类型?

3
我有一个如图所示的数据帧。我想使用apply/map/applymap获取每行和列的数据类型。 如何获得此数据类型?一些列具有混合的数据类型,如高亮显示的列表和字符串,一些列具有列表和字典。


1
你期望的数据框是什么?请把你的数据放在代码中,好吗? - Carmoreno
你应该修改生成这些数据的代码。 - furas
这是CSV文件数据,我想要每一列的信息,即它是否结构化或非结构化。 - Akash Talole
预期输出如下:column1 -> 字符串,column2 -> 列表和字典,column3 -> 列表,column4 -> 字典。 - Akash Talole
1个回答

6
如果您想获取每个单元格的计算值类型,可以使用:
def check_type(x):
     try: 
        return type(eval(x)) 
     except Exception as e:
        return type(x)

df.applymap(check_type)

如果你想获取你有多少种数据类型,可以使用以下内容:
df.applymap(type).value_counts()

如果你想获取整个数据框的值而不是按列获取

np.unique(df.applymap(type).astype(str).values, return_counts=True)


df.applymap(type)会给出列表或字典的<class 'str'>类型。我想要相应数据的<class 'list'>或<class 'dict'>。 - Akash Talole
1
但这意味着它们是字符串。您可以评估所有单元格并检查类型,但这会很慢。我正在更改解决方案。请审阅并接受答案。 - alparslan mimaroğlu
1
请勿对从外部资源获取的数据执行此操作。这会评估每个单元格的代码,因此如果存在恶意代码,则会评估该代码块。请谨慎使用。 - alparslan mimaroğlu
如何获取具有<class 'dict'>和<class 'list'>的列名 @alparslanmimaroğlu? - Roshni Kasliwal
应该像这样:df[df.isin(["<class 'dict'>", "<class 'list'>"]).any(axis=0)] - alparslan mimaroğlu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接