如何检查数据帧列的值是否为列表?

时间:2017-09-28 08:23:05

标签: python-3.x pandas

我有2个25列的数据框。我试图获得两个数据框中每列的分布,以进行比较研究。

我这样做:

count1=df1[col].value_counts().reset_index()
count2=df2[col].value_counts().reset_index()
merged=count1.merge(count2,how='outer',on='index')

有些列有列表而不是字符串。我想将它们转换为字符串,然后执行上述步骤。

df1[col+'_str']=df1[col].str.join(' ') 
df2[col+'_str']=df2[col].str.join(' ') 

现在,问题是我不知道哪些列会有列表。有没有办法找到列的内容是否有列表/字符串?

我试过了:

if((type(df1[col].iloc[0])=='list' )):

但是,其中一些没有第0行值的列会绕过这个测试!

如何找出数据框列中的内容类型?

我提到了这个问题,但不能使用太多:SO question

2 个答案:

答案 0 :(得分:2)

您可以像这样测试前10个值(例如):

df1[col].head(10).apply(lambda v: isinstance(v, list)).any()

如果前10个中的任何值都是列表,则为真。

答案 1 :(得分:2)

您可以选择dtype object(字符串,列表,...)

的列
df_obj = df.select_dtypes(include=[object])

然后尝试类似:

def myfunction(value):
    if isinstance(value, list):
        return ' '.join(value)
    else:
        return value

df_str = df_obj.apply(myfunction)