【问题标题】:I am trying to merge two DataFrame which have few same values but it gives an empty set?我正在尝试合并两个具有几个相同值但它给出一个空集的 DataFrame?
【发布时间】:2020-10-24 22:56:26
【问题描述】:
unitowns = get_list_of_university_towns()
bottom = get_recession_bottom()
start = get_recession_start()
hdata = convert_housing_data_to_quarters()
bstart = hdata.columns[hdata.columns.get_loc(start) - 1]
hdata= hdata[[bstart,bottom]]
hdata['Ratio']=hdata[bstart]/ hdata[bottom]
hdata=hdata.reset_index()

combined = pd.merge (hdata, unitowns, how='inner', on=['State','RegionName'])
 

 

需要进行以下清洁:

  1. 对于“State”,删除从“[”到结尾的字符。
  2. 对于“RegionName”,如果适用,将“(”中的每个字符删除到 结束。
  3. 根据您读取数据的方式,您可能需要删除换行符 字符'\n'。 '''

获取 unitown 值的代码

   df = pd.read_csv('university_towns.txt', delimiter = '\t', header= 
   None).rename(columns={0:'Data'}) 
   boolian_df = df['Data'].str.contains('[edit]', regex= False) 
   state_university= []
   for index, value in boolian_df.items():
      if value:
         state = df.loc[index].values[0]
      else:
         region = df.loc[index].values[0]
         state_university.append([state,region])

   final_dataframe = pd.DataFrame(state_university, columns=['State', 
   'RegionName'])
   final_dataframe['State'] = final_dataframe['State'].str.replace('\ 
   [edit.*','') 
   final_dataframe['RegionName'] = 
   final_dataframe['RegionName'].str.replace('\ 
   (.*', '')
   final_dataframe['RegionName'] = 
   final_dataframe['RegionName'].str.replace('University.*,', '')
   return final_dataframe  

输出 unitowns.head()

      State      RegionName  Type
      Alabama        Auburn   Uni
      Alabama      Florence   Uni
      Alabama  Jacksonville   Uni
      Alabama    Livingston   Uni
      Alabama    Montevallo   Uni

输出 hdata.head()

          State      RegionName         2008q1         2009q2     Ratio
          New York      New York     508500.000000  465833.333333  1.091592
          California   Los Angeles   535300.000000  413900.000000  1.293308
          Illinois       Chicago     243733.333333  219700.000000  1.109392
          Pennsylvania  Philadelphia 119566.666667  116166.666667  1.029268
          Arizona       Phoenix  218633.333333  168233.333333  1.299584

两个数据框具有相同的列名。

它给出了 Empty DataFrame 列:[State, RegionName, 2008q1, 2009q2, Ratio] 索引:[]

【问题讨论】:

标签: pandas dataframe inner-join data-science data-analysis


【解决方案1】:

如果两个数据框都有相同的列,那么我猜你想加入它。

hdata.append(unitowns, inplace=True)

【讨论】:

  • 我只想包含两个数据框中的公共值,两个数据框中的两列相同,其余的则不同。
  • hdata = hdata[list(unitowns.columns)] 将创建相同列的数据框,现在您可以追加
  • 追加在底部添加新值。我不是在寻找那个。我想合并数据框而不是追加
【解决方案2】:

样本数据

unitowns=pd.DataFrame({'State':['New York','California'],'RegionName':['New York','Los Angeles'],'Type':['Uni','Uni']})
print(unitowns)

       State   RegionName  Type
0    New York     New York  Uni
1  California  Los Angeles  Uni

hdata=pd.DataFrame({'State':['New York','California'],'RegionName':['New York','Los Angeles'],'2008q1':['500.000','400.000']})
print(hdata)

     State   RegionName   2008q1
0    New York     New York  500.000
1  California  Los Angeles  400.000

合并

 pd.merge(hdata,unitowns, how='left', on=['State','RegionName'])
     State      RegionName   2008q1 Type
0    New York     New York  500.000  Uni
1  California  Los Angeles  400.000  Uni

【讨论】:

  • 我已经从 unitown 的文本文件中读取,然后在清理数据之后。它类似于 unitowns.head() 的形式。现在我发现的问题是我无法从 unitowns 获取 RegionName 的值。
  • 这就是为什么合并对我不起作用。我该怎么做?
  • 两个数据帧中的区域名称是否不同?如果是,pd.merge(hdata,unitowns, how='left', on=['State'], suffixes=('_x', '_y'))
  • 我不会从 unitowns 访问 RegionName 的值。
  • 我通过 unitowns.loc[unitowns['RegionName'] == 'Los Angeles'] 访问它。输出为空。但是,当我打印整个 unitowns 时,洛杉矶就在那儿。无法弄清楚我缺少什么
猜你喜欢
  • 2020-05-12
  • 2017-09-02
  • 2014-09-28
  • 2020-06-13
  • 2021-10-07
  • 2022-10-18
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多