python merge错误ValueError: You are trying to merge on object and int64 columns.

python 在用merge函数的时候出现这种错误

修改方法:

city['city_num'] = pd.to_numeric(city['city_num'], errors='coerce') 将连接列都用这个函数进行转换

使用to_numeric转为数值。默认情况下,它不能处理字母型的字符串'pandas'

可以将无效值强制转换为NaN

 

city['city_num'] = pd.to_numeric(city['city_num'], errors='ignore')

如果遇到无效值,第三个选项就是忽略该操作

对于多列或者整个DataFrame

如果想要将这个操作应用到多个列,依次处理每一列是非常繁琐的,所以可以使用DataFrame.apply处理每一列。

对于某个DataFrame:

df[['col2','col3']] = df[['col2','col3']].apply(pd.to_numeric)

 

但是,可能不知道哪些列可以可靠地转换为数字类型。在这种情况下,设置参数:

df.apply(pd.to_numeric, errors='ignore')

然后该函数将被应用于整个DataFrame,可以转换为数字类型的列将被转换,而不能(例如,它们包含非数字字符串或日期)的列将被单独保留。

另外pd.to_datetimepd.to_timedelta可将数据转换为日期和时间戳。

软转换——类型自动推断

版本0.21.0引入了infer_objects()方法,用于将具有对象数据类型的DataFrame的列转换为更具体的类型。

例如,用两列对象类型创建一个DataFrame,其中一个保存整数,另一个保存整数的字符串:

然后使用infer_objects(),可以将列'a'的类型更改为int64:

df = df.infer_objects()

astype强制转换

如果试图强制将两列转换为整数类型,可以使用df.astype(int)

import pandas as pd
import os
import re
os.chdir(u'E:/pycharm/Test/profile/')
file_name = 'news_app.xlsx'

data_attribute = pd.read_excel(file_name,sheet_name='city')
data_attribute['city_num'] = pd.to_numeric(data_attribute['city_num'], errors='coerce')
city = pd.read_excel('city_name.xlsx',sheet_name='Sheet1')
city['city_num'] = pd.to_numeric(city['city_num'], errors='coerce')
all = pd.merge(data_attribute,city,on=['city_num'])
all_final = all.drop(['city_num','category'],1)

final_city = all_final.groupby(['brand','city']).sum().reset_index()
group1=all_final.groupby('brand').sum().reset_index()
group1.rename(columns={'uv':'all_uv'}, inplace = True)
p = pd.merge(final_city,group1,on=['brand'])
p['rate'] = p['uv']/p['all_uv']
p.to_csv('city1.csv',encoding='utf_8_sig')

 

你可能感兴趣的:(python,报错)