我打算合并两个数据框架,芝加哥犯罪和Redfin房地产数据,但是Redfin数据是按芝加哥的社区收集的,而犯罪数据是按社区区域收集的。为了做到这一点,我在芝加哥找到了neighborhood map,我有点搞清楚了如何将邻里分配到社区区域。两个数据帧的结构有点不同,所以我做了几步操作。以下是我尝试的细节:
示例数据片段
下面是我可以查看example data snippet的公共要点。你知道吗
这是我从网上收集的neighborhood mapping。你知道吗
我的解决方案
这是我的第一个映射解决方案:
code_pairs_neighborhoods = [[p[0], p[1]] for p in [pair.strip().split('\t') for pair in neighborhood_Map.strip().split('\n')]]
neighborhood_name_dic = {k[0]:k[1] for k in code_pairs_neighborhoods} #neighborhood -> community area
chicago_crime['neighborhood'] = chicago_crime['community_name'].map(neighborhood_name_dic)
Redfin['neighborhood'] = Redfin['Region'].map(neighborhood_name_dic)
final_df= pd.merge(chicago_crime, chicago_crime, on='neighborhood')
但是这个解决方案没有找到正确的映射,neighborhood
变成了NAN,这是错误的。你知道吗
第二次映射尝试:
在不使用邻域映射的情况下,我直观地提出了以下映射解决方案:
chicago_crime['community_name']=[[y.split() for y in x] for x in chicago_crime['community_name']]
Redfin['Region']= [[j.split() for j in i] for i in Redfin['Region']]
idx, datavalue = [], []
for i,dv in enumerate(chicago_crime['community_name']):
for d in dv:
if d in Redfin['Region'][i]:
if i not in idx:
idx.append(i)
datavalue.append(d)
chicago_crime['merge_ref'] = datavalue
Redfin['merge_ref'] = datavalue
final_df= pd.merge(chicago_crime[['community_area','community_name','merge_ref']], Redfin, on='merge_ref')
但是这个解决方案给了我一个错误:ValueError: Length of values does not match length of index
,AttributeError: 'list' object has no attribute 'split'
。你知道吗
我怎样才能做到这一点?基于neighborhood mapping,如何获得Redfin数据和芝加哥犯罪数据的正确映射?有没有办法让这个映射正确并得到正确的合并数据帧?有什么想法吗?提前谢谢。你知道吗
更新:
我将包括数据集在内的所有解决方案都放在这个github存储库all solution and data on github
好吧,我发现了:
neighborhood_Map
的第一行中有一个unicode字符,您可能要删除它:Cabrini\xe2\x80\x93Green'
->;Cabrini Green
切换
neighborhood_name_dic
中的键和值,因为您要将现有的“Rogers Park”映射到附近的“East Rogers Park”,如下所示:neighborhood_name_dic = {k[1]:k[0] for k in code_pairs_neighborhoods}
我们仍然不知道从您的代码中如何读取Redfin data,但我认为您必须在合并之前删除
Region
列中的Chicago, IL -
部分?你知道吗更新:所以我想我理解了你的代码(再次,请在发布之前尝试清理一下这些东西),我认为
Redfin
等于house_df
。所以不是说:我建议创建一个邻里专栏:
然后可以在以下位置合并:
要测试它,请尝试:
由此产生:
所以两个数据集的成功连接(我认为)。你知道吗
更新2,关于
merge()
的成功。你知道吗我就是这样读入并清理你的
xlsx
文件的:现在我们开始寻找两个df中所有独特的社区
这表明29在DOUSE df(如“东皮尔森”)中丢失,而132只在DOUSE df(如“奥尔巴尼公园”)中找到,即我们只能“内部连接”46个条目。你知道吗
现在,您必须决定如何继续,最好是先read this了解合并的工作方式(例如,了解那里发布的维恩图),然后您可以相应地改进您的代码!或者:以前手动清理数据,有时没有全自动的解决方案!你知道吗
相关问题 更多 >
编程相关推荐