首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Pandas只比较标记相同的DataFrame对象

Python Pandas只比较标记相同的DataFrame对象
EN

Stack Overflow用户
提问于 2016-06-01 07:19:53
回答 3查看 40.8K关注 0票数 6

我尝试了这里的所有解决方案:Pandas "Can only compare identically-labeled DataFrame objects" error

对我不起作用。这就是我得到的。我有两个数据帧。一个是系统中已经存在的一组财务数据,另一个是系统中可能存在或可能不存在的一些财务数据。我需要找出不同之处并添加不存在的东西。

代码如下:

代码语言:javascript
运行
复制
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)

失败的代码是最后一行。我正在浏览一篇关于确定数据帧之间的差异的文章。

我检查了所有列上的数据类型,它们看起来是相同的。我还做了一个并排的输出,我排序了轴,索引,删除了索引等等。仍然得到那个该死的错误。

下面是第一行现有and数据的输出

代码语言:javascript
运行
复制
>>> 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

下面是我收到的确切错误:

代码语言:javascript
运行
复制
>>> 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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-01 08:07:03

为了解决这个问题,您需要比较底层的numpy数组。

代码语言:javascript
运行
复制
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)
票数 13
EN

Stack Overflow用户

发布于 2017-01-16 00:43:56

如果您想要比较2个数据帧。使用.eq(),.nq(),gt()等方法在Pandas中进行灵活的比较...-->等于,不等于,然后大于。

示例:

df['new_col'] = df.gt(df_1)

http://pandas.pydata.org/pandas-docs/stable/basics.html#flexible-comparisons

票数 3
EN

Stack Overflow用户

发布于 2016-06-01 20:38:49

使用一些假数据进行复制,以达到删除重复数据的最终目标。请注意,这不是原始问题的答案,而是我试图导致问题的原因的答案。

代码语言:javascript
运行
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37557131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档