Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,用于计算复制行的平均值_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python,用于计算复制行的平均值

Python,用于计算复制行的平均值,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,要根据列“n”中的值复制行,并使用平均值(v除以n)重新分配列“v”中的值,如下所示: 我在跟踪样品 但它会返回一条错误消息: Traceback (most recent call last): File "C:\Python27\Working Scripts\pv.py", line 14, in <module> df2 = df.loc[np.repeat(df.index.values, df.n)] File "C:\Python27\lib\site-packa

要根据列“n”中的值复制行,并使用平均值(v除以n)重新分配列“v”中的值,如下所示:

我在跟踪样品

但它会返回一条错误消息:

Traceback (most recent call last):
  File "C:\Python27\Working Scripts\pv.py", line 14, in <module>
df2 = df.loc[np.repeat(df.index.values, df.n)]
File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 445, in repeat
return _wrapfunc(a, 'repeat', repeats, axis=axis)
File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 61, in _wrapfunc
return _wrapit(obj, method, *args, **kwds)
File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 41, in _wrapit
result = getattr(asarray(obj), method)(*args, **kwds)
TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'
回溯(最近一次呼叫最后一次):
文件“C:\Python27\Working Scripts\pv.py”,第14行,在
df2=df.loc[np.repeat(df.index.values,df.n)]
文件“C:\Python27\lib\site packages\numpy\core\fromneric.py”,第445行,重复
返回_wrapfunc(a,‘重复’,重复,轴=轴)
文件“C:\Python27\lib\site packages\numpy\core\fromneric.py”,第61行,在\u wrapfunc中
返回_wrapit(对象,方法,*args,**kwds)
文件“C:\Python27\lib\site packages\numpy\core\fromneric.py”,第41行,在\u wrapit中
结果=getattr(asarray(obj),方法)(*args,**kwds)
TypeError:无法根据“安全”规则将数组数据从dtype('int64')强制转换为dtype('int32')

这里出了什么问题,我如何纠正?非常感谢。(其他一些panda和numpy脚本在计算机中运行良好。)

我们通常每个线程只回答一个问题,但您可能不知道。 第一个问题已在评论中得到答复。强制转换到
int32
显式解决了您的问题

对于一般问题,您可以随时重新分配值,以便

import pandas as pd
import numpy as np

df = pd.DataFrame(data={
'id': ['A', 'B', 'C'],
'n' : [1, 2, 3],
'v' : [ 10, 13, 8]
})
df2 = df.loc[np.repeat(df.index.values,df.n)]
df2.loc[:, 'v'] = df2['v'] / df2['n']

print df2

#   id  n          v
# 0  A  1  10.000000
# 1  B  2   6.500000
# 1  B  2   6.500000
# 2  C  3   2.666667
# 2  C  3   2.666667
# 2  C  3   2.666667
我用
.loc
方法更正了行
df2['v']=df2['v']/df2['n']
,这是在pandas中定位数据时的最佳实践

如评论中所述,它发出了警告。您可以看到此警告不会出现误报。只要你知道你在做什么,你就应该没事。此警告旨在告诉您,方法
df.loc[]
返回数据帧的副本,而您没有使用它。。。因此,你可能做错了事情

tl;从链接中,您可以通过以下操作禁用警告:


pd.options.mode.chained\u assignment=None#default='warn'

我无法复制,它在我的机器上工作。我有熊猫0.23.4,试试升级吧?它对我也有用。试试df.reindex(df.index.repeat(df.n))?@IMCoins,谢谢。我将pandas升级到0.23.4,numpy升级到1.15.2,但仍然是一样的。@Abhi,升级pandas和numpy后,仍然是一样的……这些都是我在黑暗中拍摄的照片,因为我无法复制。尝试执行
df.index.values.astype('int32')
?再次感谢。伟大的发现与问题的完美解决方案!它对df2['v']=df2['v']/df2['n']也没有什么警告。“试图在数据帧切片的副本上设置值。请尝试改用.loc[row\u indexer,col\u indexer]=value。”。如何避免此警告?谢谢,太棒了!
import pandas as pd
import numpy as np

df = pd.DataFrame(data={
'id': ['A', 'B', 'C'],
'n' : [1, 2, 3],
'v' : [ 10, 13, 8]
})
df2 = df.loc[np.repeat(df.index.values,df.n)]
df2.loc[:, 'v'] = df2['v'] / df2['n']

print df2

#   id  n          v
# 0  A  1  10.000000
# 1  B  2   6.500000
# 1  B  2   6.500000
# 2  C  3   2.666667
# 2  C  3   2.666667
# 2  C  3   2.666667