2016-05-31 746 views
1

我嘗試了所有的解決方案在這裏: Pandas "Can only compare identically-labeled DataFrame objects" errorPython的大熊貓只有比較相同標記的數據框對象

並沒有爲我工作。這是我得到的。我有兩個數據幀。一種是系統中已經存在的一組財務數據,另一套是可能存在或可能不存在於系統中的一組財務數據。我需要找到差異並添加不存在的東西。

下面是代碼:

import pandas as pd 
import numpy as np 
from azure.storage.blob import AppendBlobService, PublicAccess, ContentSettings 
from io import StringIO 

dataUrl = "http://ichart.finance.yahoo.com/table.csv?s=MSFT" 
blobUrlBase = "https://pyjobs.blob.core.windows.net/" 
data = pd.read_csv(dataUrl) 

abs = AppendBlobService(account_name='pyjobs', account_key='***') 
abs.create_container("stocks", public_access = PublicAccess.Container) 
abs.append_blob_from_text('stocks', 'msft', data[:25].to_csv(index=False)) 
existing = pd.read_csv(StringIO(abs.get_blob_to_text('stocks', 'msft').content)) 

ne = (data != existing).any(1) 

失敗的代碼是最後一行。我正在閱讀一篇關於確定數據幀之間差異的文章。

我檢查了所有列上的dtypes,它們看起來是相同的。我也做了一個並排輸出,我排序軸,指數,下降指數等仍然得到那個血腥的錯誤。

這是現有的第一行數據

>>> existing[:1] 
     Date  Open High Low Close Volume Adj Close 
0 2016-05-27 51.919998 52.32 51.77 52.32 17653700  52.32 
>>> data[:1] 
     Date  Open High Low Close Volume Adj Close 
0 2016-05-27 51.919998 52.32 51.77 52.32 17653700  52.32 

這裏的輸出是確切的錯誤我收到:

>>> ne = (data != existing).any(1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Anaconda3\lib\site-packages\pandas\core\ops.py", line 1169, in f 
    return self._compare_frame(other, func, str_rep) 
    File "C:\Anaconda3\lib\site-packages\pandas\core\frame.py", line 3571, in _compare_frame 
    raise ValueError('Can only compare identically-labeled ' 
ValueError: Can only compare identically-labeled DataFrame objects 

回答

0

爲了解決這個問題,你要比較的底層numpy陣列。

import pandas as pd 

df1 = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'], index=['One', 'Two']) 
df2 = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'], index=['one', 'two']) 


df1.values == df2.values 

array([[ True, True], 
     [ True, True]], dtype=bool) 
+0

這並解決了初始誤差,所以標記爲答案爲,但它不通過元件相比做的元件。我期待着一個布爾值矩陣(或bools類似的數據結構)。我得到一個布爾值true或false。 –

+0

請注意,我的數據框大小不同。 –

0

用一些假數據複製以實現刪除重複項的最終目標。請注意,這不是原始問題的答案,但答案是我試圖做什麼導致了這個問題。

b = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'], 
        'B': ['B4', 'B5', 'B6', 'B7'], 
        'C': ['C4', 'C5', 'C6', 'C7'], 
        'D': ['D4', 'D5', 'D6', 'D7']}, 
        index=[4, 5, 6, 7]) 


c = pd.DataFrame({'A': ['A7', 'A8', 'A9', 'A10', 'A11'], 
        'A': ['A7', 'A8', 'A9', 'A10', 'A11'], 
        'B': ['B7', 'B8', 'B9', 'B10', 'B11'], 
        'C': ['C7', 'C8', 'C9', 'C10', 'C11'], 
        'D': ['D7', 'D8', 'D9', 'D10', 'D11']}, 
        index=[7, 8, 9, 10, 11]) 

result = pd.concat([b,c]) 
idx = np.unique(result["A"], return_index=True)[1] 
result.iloc[idx].sort()