pd.merge не работает с преобразованным типом данных - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь объединить два фрейма данных pandas (один представляет собой пространственный фрейм данных -sdf-, а другой - простой фрейм данных) в общее поле, GEOID с использованием pd.merge. В формате sdf, GEOID - это строка, в df - int. Я использовал .astype ('str'), чтобы также преобразовать поле GE GEID в строку. Тем не менее, при вызове pd.merge вывод либо пуст, либо я получаю сообщение об ошибке «Вы пытаетесь объединить столбцы объекта и int64». Я подтвердил с помощью .dtypes (), что оба являются строками. Любая идея, почему слияние не работает?

Я попытался преобразовать как в строку, а также оба в Int. Я также попытался использовать pd.join и pd.concat, но ни один из них не работал должным образом.

import pandas as pd
#Read in CSV with updates (would already be df from Socrata pull in real version)
updated_csv= r"C:\Users\mad10412\Desktop\Active_Business_Data_Edited.csv"
updated_csv_df = pd.read_csv(updated_csv)
updated_csv_df.head(5)
updated_csv_df['GEOID10']=updated_csv_df['GEOID10'].astype(str)
updated_csv_df.dtypes
output_layer_name = 'Join_Features_Test5'
actbus=gis.content.search(output_layer_name)
ActiveBusinesses_item = actbus[0]
ActiveBusinesses_item
ActiveBusinesses_flayer = ActiveBusinesses_item.layers[0]
ActiveBusinesses_flayer
ActiveBusinesses_fset = ActiveBusinesses_flayer.query() #querying without any conditions returns all the features
ActiveBusinesses_fset.sdf.head()
ActiveBusinesses_fset.sdf.shape
ActiveBusinesses_fset.sdf.dtypes
##Attempt 1: Includes original data and Adds Column names but no data

overlap_rows = ActiveBusinesses_fset.sdf.join(updated_csv_df.set_index('GEOID10'),on='GEOID10', lsuffix='_left', rsuffix='_right')
overlap_rows.head(10)
overlap_rows.to_csv("C:\\Users\\mad10412\\Desktop\\ConcatDF.csv")

##Attempt 2: Only includes column name. no data at all
overlap_rows = pd.merge(left = ActiveBusinesses_fset.sdf, 
                        right = updated_csv_df, 
                        how='inner',
                        on = 'GEOID10')
overlap_rows.head(5)
overlap_rows.to_csv("C:\\Users\\mad10412\\Desktop\\ConcatDF2.csv")

##Attempt 3: Includes all columns and all data, but GEOIDs don't match
result = pd.concat([ActiveBusinesses_fset.sdf, updated_csv_df], axis=1, join='inner')
result.head(5)
result.to_csv("C:\\Users\\mad10412\\Desktop\\ConcatDF3.csv")


##Attempt 4:  Only includes column name. no data at all
left=ActiveBusinesses_fset.sdf
right=updated_csv_df
result = pd.merge(left, right, how='inner',on=['GEOID10', 'GEOID10'])
result.head(5)
result.to_csv("C:\\Users\\mad10412\\Desktop\\ConcatDF4.csv")

Данные для обоих фреймов данных выглядят так:

df=pd.DataFrame({'GEOID': ['060372932023', '060372941201', '060372932022'],
               'Mining': [6, 4,2 ],
               'Agriculture': [10, 12, 4]})
df

Единственное различие между фреймами данных состоит в том, что в одном столбце формы содержится геометрия. По сути, я пытаюсь объединить эти фреймы данных вместе, чтобы найти случаи, когда значения для таких полей, как «Сельское хозяйство» и «Горное дело», отличаются.

df=pd.DataFrame({'GEOID': ['060372932023', '060372941201', '060372932022'],
               'Mining': [6, 4,2 ],
               'Agriculture': [10, 12, 4],
                'Mining2': [8, 3 , 1],
               'Agriculture2': [14, 0, 6]})
df

Это должно привести к получению по одной строке для каждого ГЕОИДа с данными изоба кадра данных. См. Последние комментарии к фрагменту кода, чтобы узнать, как на самом деле выглядят выходные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...