pandas.Series operator / =在Python 2和Python 3中的不同行为

时间:2017-10-22 08:45:46

标签: python python-2.7 python-3.x pandas numpy

这是一个简短的python代码,其中anaconda2和anaconda3版本之间存在一个非常奇怪的区别:

from django.db import models
from django import forms
from .models import Project
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from PIL import Image
class ProjectForm(forms.ModelForm):
   class Meta:
        model = Project
        fields = ['project_name','project_cost',...(other fields),]

当我以这种方式运行时:

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

根据我对python的理解,python3运行证明了正确的行为。为什么operator / =不影响python2中的函数参数?甚至更多,为什么然后运算符* =确实会影响它??!

我正在使用官方Anaconda网站上的python和pandas。版本是:(python 3.6.0,pandas 0.19.2)和(python 2.7.13,pandas 0.20.3)

编辑1: 尝试用整数(即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 )给我带来:

a = pd.DataFrame(data=[[10, 20]], columns=['a', 'b'], dtype='int')

1 个答案:

答案 0 :(得分:1)

这是Pandas issue 12962truffle(development)> web3.eth.getBlock('latest').gasLimit 中的错误导致pandas.core.ops错过了更新系列而不是返回副本的处理。将Pandas更新到至少0.21应该可以解决问题。