Python2とPython3でのpandas.Series演算子/ =の動作の違い

アレクサンダーカザコフ

これは、anaconda2バージョンとanaconda3バージョンの本当に奇妙な違いが現れる短いPythonコードです。

import pandas as pd


def div(x):
    to_sum = x['a']
    to_sum /= 2


def mul(x):
    to_sum = x['a']
    to_sum *= 2


a = pd.DataFrame(data=[[10.0, 20.0]], columns=['a', 'b'])
print('init:')
print(a)

div(a)
print('after div:')
print(a)

mul(a)
print('after mul:')
print(a)

私がこのようにそれを実行するとき:

echo "python3:" && \
~/work/Programs/Anaconda/anaconda3/bin/python3 tmp.py && \
echo && \
echo "python2:" && \
~/work/Programs/Anaconda/anaconda2/bin/python2 tmp.py

バージョンが異なれば、主に異なる結果が得られます。

python3:
init:
      a     b
0  10.0  20.0
after div:
     a     b
0  5.0  20.0
after mul:
      a     b
0  10.0  20.0

python2:
init:
      a     b
0  10.0  20.0
after div:
      a     b
0  10.0  20.0
after mul:
      a     b
0  20.0  20.0

私がPythonを理解している時点では、正しい動作はpython3runによって示されています。演算子/ =がpython2の関数引数に影響を与えないのはなぜですか?さらに、なぜ演算子* =がそれに影響するのですか??!

私はアナコンダの公式ウェブサイトからPythonとパンダを使用しています。バージョンは次のとおりです:(python 3.6.0 with pandas 0.19.2)および(python 2.7.13 with pandas 0.20.3)

編集1:整数(つまりa = pd.DataFrame(data=[[10, 20]], columns=['a', 'b'], dtype='int')に対してこれを試してみると、次のようになります。

python3:
init:
    a   b
0  10  20
after div:
     a   b
0  5.0  20
after mul:
      a   b
0  10.0  20

python2:
init:
    a   b
0  10  20
after div:
    a   b
0  10  20
after mul:
    a   b
0  20  20
user2357112はモニカをサポートしています

これはパンダの12962号でしたのエラーpandas.core.opsにより__idiv__、コピーを返す代わりにシリーズを適切に更新する処理が欠落していました。パンダを少なくとも0.21に更新すると、問題が修正されるはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CString演算子「+ =」と「+」の間の動作の違い

分類Dev

Gradle左シフト演算子(<<)とdoLastの動作の違い

分類Dev

javascriptの動作と演算子

分類Dev

libstdc ++とlibc ++の動作の違い:ビットセットの演算子>>

分類Dev

Pythonでの増分演算子と減分演算子の動作

分類Dev

JSP比較演算子の動作

分類Dev

三項演算子の動作

分類Dev

bash:&&演算子の動作

分類Dev

UNIONALL演算子の予期しない動作

分類Dev

Python2とPython3のフィルター動作の違い

分類Dev

>>>演算子と>>演算子の違い

分類Dev

「&&」演算子と「and」演算子の違い

分類Dev

Unicode演算子とASCII演算子の違い

分類Dev

PythonでのIS演算子の珍しい動作

分類Dev

Pythonの「is not」演算子

分類Dev

^ = Pythonの演算子

分類Dev

Pythonの演算子

分類Dev

「is」演算子を使用したPythonでの予期しない動作

分類Dev

Pythonの割り当て演算子と複合演算子の違い

分類Dev

Cのsizeof()演算子での「コンマ」演算子の動作

分類Dev

&の後に続く*演算子の動作

分類Dev

Java代入演算子の動作とC ++

分類Dev

Java代入演算子の動作とC ++

分類Dev

Pythonの!=演算子と<>演算子に違いはありますか?

分類Dev

パンダのブール演算による動作の違い

分類Dev

C ++での三項演算子の予期しない動作

分類Dev

PLSQLでの除算演算子の紛らわしい動作

分類Dev

C#での三項演算子の予期しない動作

分類Dev

SQLの動的演算子