Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python:Merge-TypeError:unhable-type:';dict';_Python 3.x_Pandas_Merge_Typeerror - Fatal编程技术网

Python 3.x Python:Merge-TypeError:unhable-type:';dict';

Python 3.x Python:Merge-TypeError:unhable-type:';dict';,python-3.x,pandas,merge,typeerror,Python 3.x,Pandas,Merge,Typeerror,我有两个数据帧: import mygeotab as geo import pandas as pd api = geo.API(username='**********', password='*********', database='*********') loc = api.get('DeviceStatusInfo') df1 = pd.DataFrame(loc) df2 = pd.read_csv(r"C:\Users\AFSERVICES-2\OneDrive -

我有两个数据帧:

 import mygeotab as geo
 import pandas as pd
 api = geo.API(username='**********', password='*********', database='*********')
 loc = api.get('DeviceStatusInfo')
 df1 = pd.DataFrame(loc)
 df2 = pd.read_csv(r"C:\Users\AFSERVICES-2\OneDrive - Above Ground Marketing\AF Projects\Dev       \GeoTab_id_list.csv")
 df1 = df1.drop(['bearing','currentStateDuration','exceptionEvents','isDeviceCommunicating','isDeviceCommuni    cating','dateTime','isHistoricLastDriver','groups'],axis=1)
 df1 = df1[['device','driver','latitude','longitude','speed','isDriving']]
 df2.rename(columns={'device':'id'}, inplace=True)
 df1.rename(columns={'device':'id'}, inplace=True)
 >>> df1
       id           driver   latitude   longitude  speed  isDriving
 0   {'id': 'b49'}    {'id': 'b1F'}  32.709248  -97.937584  105.0       True
 1   {'id': 'b60'}    {'id': 'bFF'}  32.677555  -97.072617   41.0       True
 2   {'id': 'b53'}    {'id': 'bB7'}  32.710709  -96.341431  111.0       True
 3   {'id': 'b68'}    {'id': 'b50'}  33.255295  -94.841141  109.0       True
 4   {'id': 'b5A'}   {'id': 'b149'}  34.356915  -98.409599   98.0       True
 ..           
 83  {'id': 'b6E'}  UnknownDriverId  31.716249 -106.218651    0.0      False
 84  {'id': 'b67'}  UnknownDriverId  31.716736 -106.218979    0.0      False
 85  {'id': 'b71'}   {'id': 'b155'}  31.716532 -106.219009    0.0      False
 86  {'id': 'b36'}  UnknownDriverId  31.729588 -106.237366    0.0      False
 87  {'id': 'b4E'}  UnknownDriverId  31.716556 -106.218575    0.0      False

 [88 rows x 6 columns]

 >>> df2
       id  truck
 0   {'id': 'b9'}   AF008
 1   {'id': 'b1E'}  AF009
 2   {'id': 'b7'}   AF012
 3   {'id': 'b10'}  AF013
 4   {'id': 'bF'}   AF014
 ..            
 87  {'id': 'b72'}  AF099
 88  {'id': 'b73'}  AF100
 89  {'id': 'b41'}   LS01
 90  {'id': 'b42'}   LS02
 91  {'id': 'b43'}   LS03

 [92 rows x 2 columns]
我想合并它们,匹配“id”

 df3 = pd.merge(df1,df2,on='id')
但我得到了这个错误:

TypeError:不可损坏的类型:“dict”


我想将gps跟踪设备“id”编号与实际卡车编号相匹配。我已经为此工作了两天,并尝试了不同的变化。如果我没有得到类型错误,我会得到一个索引错误

你面临什么问题?我猜你在合并之前从字典中提取了id?去掉id列中的dict。列条目应该看起来像
'b9'
,而不是
{'id':'b9'}
。您可以尝试类似
df['id']=df['id'].apply(lambda d:d['id'])的内容。
我没有手动创建一个CSV文件,该文件包含与设备“id”相关的卡车编号。我想我可以用这个作为参考,就像你在excel中使用vlookup一样。Chuho的方法奏效了。谢谢大家的投入,非常感谢。