2016-09-08 14 views
0

私は2つのデータフレームで変更データキャプチャをしようとしています。ロジックは、2つのデータフレームをマージして1つのキーでグループ化し、count> 1のグループに対してループを実行して、「更新された」列を確認することです。私は奇妙なエラーが発生しています。どんな助けもありがとう。 コードパンダiterrows投げエラー

import pandas as pd 
import numpy as np 

pd.set_option('display.height', 1000) 
pd.set_option('display.max_rows', 500) 
pd.set_option('display.max_columns', 500) 
pd.set_option('display.width', 1000) 
print("reading wolverine xlxs") 


# defining metadata 

df_header = ['DisplayName','StoreLanguage','Territory','WorkType','EntryType','TitleInternalAlias', 
     'TitleDisplayUnlimited','LocalizationType','LicenseType','LicenseRightsDescription', 
     'FormatProfile','Start','End','PriceType','PriceValue','SRP','Description', 
     'OtherTerms','OtherInstructions','ContentID','ProductID','EncodeID','AvailID', 
     'Metadata', 'AltID', 'SuppressionLiftDate','SpecialPreOrderFulfillDate','ReleaseYear','ReleaseHistoryOriginal','ReleaseHistoryPhysicalHV', 
      'ExceptionFlag','RatingSystem','RatingValue','RatingReason','RentalDuration','WatchDuration','CaptionIncluded','CaptionExemption','Any','ContractID', 
      'ServiceProvider','TotalRunTime','HoldbackLanguage','HoldbackExclusionLanguage'] 
df_w01 = pd.read_excel("wolverine_1.xlsx", names = df_header) 

df_w02 = pd.read_excel("wolverine_2.xlsx", names = df_header) 

df_w01['version'] = 'OLD' 
df_w02['version'] = 'NEW' 

#print(df_w01) 
df_m_d = pd.concat([df_w01, df_w02], ignore_index = True) 

first_pass = df_m_d[df_m_d.duplicated(['StoreLanguage','Territory','TitleInternalAlias','LocalizationType','LicenseType','FormatProfile'], keep=False)] 

first_pass_keep_duplicate = df_m_d[df_m_d.duplicated(['StoreLanguage','Territory','TitleInternalAlias','LocalizationType','LicenseType','FormatProfile'], keep='first')] 

group_by_1 = first_pass.groupby(['StoreLanguage','Territory','TitleInternalAlias','LocalizationType','LicenseType','FormatProfile']) 
for i,rows in group_by_1.iterrows(): 
    print("rownumber", i) 
    print (rows) 


print(first_pass) 

そして、私が取得エラー:

AttributeError: Cannot access callable attribute 'iterrows' of 'DataFrameGroupBy' objects, try using the 'apply' method 

は、すべてのヘルプははるかに高く評価されます。

+0

group_by操作のリスルフはグループであり、データフレームではありません。グループには反復する行が含まれていません。データフレームが含まれています。 – vmg

答えて

0

あなたGroupByオブジェクトが反復するので、代わりの

for i,rows in group_by_1.iterrows(): 
    print("rownumber", i) 
    print (rows) 

をサポートしていますが、あなたはあなたがそれぞれに何をする必要があるか行うことができます

for name, group in group_by_1: 
    print name 
    print group 

ような何かをする必要がありますgroup

the docs

0

なぜ示唆しておらず、applyを使用しますか?何かのように:

def print_rows(rows): 
    print rows 

group_by_1.apply(print_rows) 
+0

実際に行を印刷するのではなく、グループ内の各行にアクセスして、リスト/ループの種類の操作を実行する方法が問題です。私は以下のようにこのグループの問題を克服しましたが、以下に示すように内部のforループを実行するための行を 'REINDEX'できない問題がありました:group_by_1の行i: rows.reset_index() rows.reindex(index =(範囲内のjに対する行) (LEN(行)の範囲(0、LEN(行))) プリント-1): プリント(J) プリント(rows.loc [J ,:]) – SanBan

+0

問題です私がしようとするものは、スプレッドシート/データフレームからオリジナルのrownumberを保持していて、内側のループを実行することを許可していないということです:KeyError: 'ラベル[2]は[インデックス]にありません' – SanBan

+0

あなたのコードに基づく例手元にある問題はiterrowsにアクセスしていたため、私はapplyを使って代替案を出しました。別の問題に直面している場合は、質問を更新するか、新しい質問を開始することをお勧めします。 – sirfz

関連する問題