python - 熊猫合并返回一个空的数据框
问题描述
我相信我的合并函数存在问题,因为当我尝试将三个数据集添加在一起时,我返回了一个空数据框,其中的变量 2016_visitation 2017_visitation 2018_visitation 2019_visitation 在标题的顶部。我有一个断言错误告诉我它找不到列“状态”所以我想知道它是从原始未编辑数据中提取信息还是我需要包含另一个导入函数?也许另一列重命名?我的合并功能可以整体进行一些调整,但我不确定哪种方法效果最好。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import datetime
def load_data():
# importing datasets
df_2017=pd.read_excel('assets/US_States_Visited_2017.xlsx', skiprows=6,skipfooter=13)
df_2018=pd.read_excel('assets/US_States_Visited_2018.xlsx', skiprows=7,skipfooter=7)
df_2019=pd.read_excel('assets/US_States_Visited_2019.xlsx', skiprows=6,skipfooter=8)
# renaming columns
df_2017.columns = ['2017_rank','state','2016_market_share','2016_visitation','2017_market_share','2017_visitation','volume_change']
df_2018.columns = ['2018_rank','state','2018_market_share','2018_visitation','volume_change','2017_market_share','2017_visitation']
df_2019.columns = ['2019_rank','state','2019_market_share','2019_visitation','volume_change','2018_market_share','2018_visitation']
# dropping all columns except for relevent state and visitation columns
df_2017.drop(df_2017.columns[[0,2,4,6]], axis=1,inplace=True)
df_2018.drop(df_2018.columns[[0,2,4,5,6]], axis=1,inplace=True)
df_2019.drop(df_2019.columns[[0,2,4,5,6]], axis=1,inplace=True)
# multiplying visitation by 1000 to get accurate value
df_2017['2016_visitation'] = df_2017['2016_visitation']*1000
df_2017['2017_visitation'] = df_2017['2017_visitation']*1000
df_2018['2018_visitation'] = df_2018['2018_visitation']*1000
df_2019['2019_visitation'] = df_2019['2019_visitation']*1000
# starting output at state column
df_2017=df_2017.set_index('state')
df_2018=df_2018.set_index('state')
df_2019=df_2019.set_index('state')
# merging all datasets by state variable
merge = pd.merge(df_2017,df_2018,on="state")
merged_US_states_visitation = pd.merge(merge,df_2019,on='state')
# sorting alphabetically
merged_US_states_visitation.sort_values(by=['state'])
return merged_US_states_visitation
load_data().head(25)
解决方案
问题是“状态”列与变量中的值不匹配,因此我包含了 df_201x['state'] = df_201x['state'].str.strip() ,它解决了格式问题并合并了数据。
推荐阅读
- python - 使用 Python 访问 Amazon EC2 服务器上的文件
- java - Firebase 数据库中的多个等于
- reactjs - 第一次取数据成功,第二次取数据不成功
- vue.js - Vuetify:如何将 v-navigation-drawer 放在 v-app-bar 下方
- drupal - Drupal 7 webform:如何更改由“Webform Dragndrop”模块创建的字段标签?
- ios - iOS 从资产中加载缩放的 UIImage
- c# - 如何使用 Unity 的 AsyncGPUReadback 解决此错误?
- sql - 插入表格并从最后插入的行中选择 id
- sql-server-2008-r2 - 由于类型冲突,反透视数据失败
- c++ - 增加二叉树的正确方法