2017-09-01 4 views
1

DataframeとSeriesを比較して、dfの行の1つがシリーズと等しいかどうかをチェックしようとしています。データフレームとdatetimeを含むシリーズとの比較

d.values == s.values 
array([[ True, True], 
     [False, False]], dtype=bool) 

また、このエラーは発生しません使用して文字列:

d = pd.DataFrame([[1, "a"], [2, "b"]]) 

s = d.loc[1].copy() 

print(s == d) 
#  0  1 
#0 True True 
#1 False False 

import pandas as pd 
import datetime as dt 

d = pd.DataFrame([[1, dt.datetime(1990,12,10)], 
        [2, dt.datetime(1990,12,11)]]) 
s = d.loc[0].copy() 

print(d == s) # or d.gt(s) which should do the same 

これはvaluesが期待される結果が得られ比べると、次のエラー

TypeError: int() argument must be a string, a bytes-like object or a number, not 'Timestamp'

で破ります

これはパンダのバグですか、何か間違っていますか?

EDIT:

私はパンダ0.20.3

でのpython 3.6を使用している私はパンダのgithubの上の問題を開設: 17411

答えて

0

問題は、私はピップまたはcondaを通じて利用可能な最新バージョンであるバージョン0.20.3を持っていたことでした。

Version 0.21、githubの最後の開発者版がこの問題を解決したようです。

は、私は、すぐにバージョン0.21は、あなたの言うことが本当であれば、また破る必要があります以下は、PyPI

1

撤回

コメントで述べたように、 (とおそらく質問に追加する価値がある)これは文字列のために働くので、なぜそれがうまくいかないのか分かりませんdatetimes

ディスカッションでgithub hereは、数値と比較したときにdatetimeがfalseであるべきかどうかに関する継続的な議論であることを示唆しています。


あなたは、次の取得sdを印刷した場合:

D:

0   1 
0 1 1990-12-10 
1 2 1990-12-11 

秒:秒で

0      1 
1 1990-12-10 00:00:00 
Name: 0, dtype: object 

、数字0,1上左にはインデックス(s == dを比較するキー)がありますdeは11と比較し、次に21990-12-10 00:00:00に対して比較しています。これがエラーを起こす理由です。

これは値を扱う理由として

から.valuesはインデックスなしでnumpyの配列をバック与え、その比較は、あなたが期待するのではなく、インデックスを考慮した形状で行われます。

+0

上にあるとして、質問を削除します: 'D = pd.DataFrame([[1、「」]、 [2、 "b"]]) s = d.loc [0] .copy() '、' d == s'しかし、実際に面白いです – gionni

+0

@gionniはありません - 私はそれをもっと見てください。 – Stael

+0

本当にありがとう、感謝します。私はそれがどのように動作するかを理解するためにデバッグでサンプルを実行しようとしていますが、それはかなり複雑です – gionni

0

私は問題は、比較をサポートしていない2つのオブジェクトを比較していると思います。

私はこのような何かを試してみた:

d[d[1] == dt.datetime(1990,12,10)]

+0

私はどの列に日付があり、どの列がすべての列をチェックするのにプラスでないのかわからないので、私はそれをサイクルに入れなければならないでしょう – gionni

関連する問題