import pandas as pd
# 举个例子可能会更清楚点
a = pd.DataFrame([['1','bob','27',],['2','danny','17'],['3','jamse','38']],columns =['id','name','age'])
b = pd.DataFrame([['1','48'],['3','59'],['4','78'],['2','84'],['5','49']],columns =['id','score'])# 上面很明显我们取的全是str类型的数据
d = b.merge(a,how ='left',on ='id')'''
######下面是合并后的d#######
id score name age
0 1 48 bob 27
1 3 59 jamse 38
2 4 78 NaN NaN
3 2 84 danny 17
4 5 49 NaN NaN
'''# 接下来就是见证奇迹的时候# 打印一下d的数据类型for i in d.columns:print(i,'数据类型是:',type(d[i].iloc[0]))'''
#######结果发现并没有什么问题?搞错了?#############
id 数据类型是: <class 'str'>
score 数据类型是: <class 'str'>
name 数据类型是: <class 'str'>
age 数据类型是: <class 'str'>
'''# 再来for i in d.columns:print(i,'数据类型是:',type(d[i].iloc[2]))'''
######哈哈哈,变了吧#######
id 数据类型是: <class 'str'>
score 数据类型是: <class 'str'>
name 数据类型是: <class 'float'>
age 数据类型是: <class 'float'>
'''# 有什么疑惑?再看?for i in d.columns:print(i,'数据类型是:',d[i].dtypes)'''
######查看每一列的整体类型都是object######
id 数据类型是: object
score 数据类型是: object
name 数据类型是: object
age 数据类型是: object
'''# 分析下原因,Pandas 在不指定的情况下会把nan识别为float# 这个时候因为其中有str类型,又有float类型,为了统一每一列的数据类型就把它升级到共同父类型object了