我有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
答案 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)