【问题标题】:Pandas Merge function only giving column headers - UpdatePandas 合并功能仅提供列标题 - 更新
【发布时间】:2019-04-01 06:47:06
【问题描述】:

我想要达到的目标。

我有两个数据框。 DF1 和 DF2。两者都是从不同的excel文件中读取的。 DF1 有 9 列和 3000 行,其中列名称之一是“代码组”。 DF2 有 2 列 20 行,其中一列名称也是“代码组”。在同一数据框中,另一列“代码管理方法”给出了代码组的解释。例如。 H001 按可回收处理,H002 按垃圾填埋处理。

会发生什么

当我使用命令 data = pd.merge(DF1,DF2, on='Code Group') 时,我只得到 10 个列名,但下面没有行。

我的期望

我希望将 DF1 和 DF2 合并,并且在代码组编号相同的地方粘贴代码管理方法以进行解释。

其他信息

               Following are datatype for DF1
               Entity                       object
               Address                      object
               State                        object
               Site                         object
               Disposal Facility            object
               Pounds                      float64
               Waste Description            object
               Shipment Date        datetime64[ns]
               Code Group                   object

               FollOwing are datatype for DF2
               Code Management Method    object
               Code Group                object

我尝试了什么

我尝试遵循 SO 上类似帖子的建议,即双方的数据类型应该相同,并且这里的代码组都是对象,所以不知道有什么问题。我也尝试过 Concat 功能。

代码

   import pandas as pd
   from pandas import ExcelWriter
   from pandas import ExcelFile
   CH =  "C:\Python\Waste\Shipment.xls"
   Code = "C:\Python\Waste\Code.xlsx"
   Data = pd.read_excel(Code)
   data1 = pd.read_excel(CH)
   data1.rename(columns={'generator_name':'Entity','generator_address':'Address', 'Site_City':'Site','final_disposal_facility_name':'Disposal Facility', 'wst_dscrpn':'Waste Description', 'drum_wgt':'Pounds', 'wst_dscrpn' : 'Waste Description', 'genrtr_sgntr_dt':'Shipment Date','generator_state': 'State','expected_disposal_management_methodcode':'Code Group'}, 
        inplace=True)
   data2 = data1[['Entity','Address','State','Site','Disposal Facility','Pounds','Waste Description','Shipment Date','Code Group']]
   data2
   merged = data2.merge(Data, on='Code Group')

收到警告

C:\Anaconda\lib\site-packages\pandas\core\generic.py:5890: SettingWithCopyWarning: 正在尝试在 DataFrame 中的切片副本上设置值

请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self._update_inplace(new_data)

【问题讨论】:

  • 在您提供一些数据展示您的问题之前,我们无法确定地解决您的问题。特别是,我们需要一个 minimal reproducible example。您需要 edit your question 将此信息作为文本(无图像/链接)。
  • 仍然没有得到你在Data中的数据
  • 数据只是与实体、地址、州、产生的废物磅数有关的信息。等等从excel文件。他们都是对象..感谢您的帮助

标签: pandas merge


【解决方案1】:

经过多次尝试,我发现该列有一些垃圾,所以使用下面的代码,它运行良好。有趣的是,我从 excel 文件导入的另外两个数据集上从来没有遇到过这个问题。

data2['Code'] = data2['Code'].str.strip()

【讨论】:

    【解决方案2】:
    import pandas as pd
    
    df1 = pd.DataFrame({'Region': [1,2,3],
                        'zipcode':[12345,23456,34567]})
    df2 = pd.DataFrame({'ZipCodeLowerBound': [10000,20000,30000],
                        'ZipCodeUpperBound': [19999,29999,39999],
                        'Region': [1,2,3]})
    
    df1.merge(df2, on='Region')
    

    示例是这样给出的,结果是:

       Region   zipcode
    0   1       12345
    1   2       23456
    2   3       34567
    
       Region   ZipCodeLowerBound   ZipCodeUpperBound
    0   1            10000               19999
    1   2            20000               29999
    2   3            30000               39999
    

    那件事会导致

        Region  zipcode ZipCodeLowerBound   ZipCodeUpperBound
    0      1      12345       10000             19999
    1      2      23456       20000             29999
    2      3      34567       30000             39999
    

    我希望这是你想要做的

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 2017-04-13
      • 2019-07-11
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多