Python 使用numpy数组修改数据帧值

Python 使用numpy数组修改数据帧值,python,numpy,pandas,Python,Numpy,Pandas,我试图用numpy数组[相同大小]修改pandas数据帧的values字段。像这样的事情是行不通的 import pandas as pd # create 2d numpy array, called arr df = pd.DataFrame(arr, columns=some_list_of_names) df.values = myfunction(arr) 有其他选择吗?我认为这是您正在寻找的方法: 将函数应用于要运行的数据帧 元素方面,例如,对中的每个系列进行映射(func,系列

我试图用numpy数组[相同大小]修改pandas数据帧的values字段。像这样的事情是行不通的

import pandas as pd
# create 2d numpy array, called arr
df = pd.DataFrame(arr, columns=some_list_of_names)
df.values = myfunction(arr)

有其他选择吗?

我认为这是您正在寻找的方法:

将函数应用于要运行的数据帧 元素方面,例如,对中的每个系列进行映射(func,系列) 数据帧

例如:

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame(np.random.rand(3,4), columns = list('abcd'))
>>> df
          a         b         c         d
0  0.394819  0.662614  0.752139  0.396745
1  0.802134  0.934494  0.652150  0.698127
2  0.518531  0.582429  0.189880  0.168490
>>> f = lambda x: x*100
>>> df.applymap(f)
           a          b          c          d
0  39.481905  66.261374  75.213857  39.674529
1  80.213437  93.449447  65.215018  69.812667
2  51.853097  58.242895  18.988020  16.849014
>>>

.values
属性通常是一个副本-特别是对于混合数据类型(因此,在新版本的pandas中,对它的赋值不能保证有效-这将提高)

您应该指定给特定的列(注意顺序很重要)


示例(在0.15.2中):


我如何将numpy数组传递给它?您将数据帧传递给它!在本例中,您可以调用
df.applymap(myfunction)
。这会修改数据帧中的值。我知道,但是如何将数据帧的元素(I,j)设置为numpy数组的元素(I,j)?这不是已经发生在
df=pd.DataFrame(arr,columns=some\u list\u name)
line中了吗?您最好展示一个最小的工作示例!添加了示例。数据帧首先从numpy数组创建。然后,使用转换函数
f
就地修改数据框内的值。清楚的@BrenBarn有一点,您也可以在创建数据帧之前转换numpy数组。顺序并不重要,至少在不了解更多上下文的情况下是这样。为什么不先执行
myfunction
,然后在最初创建数据帧时将结果传递给DataFrame?所以我的问题确实错了。我知道这是关于应用
myfunction()
,但实际上是关于如何重新分配。@Jan PhilipGehrcke不要觉得太糟糕,这也是我认为的问题所在……本着同样的精神,你也可以使用:
df.iloc[:,:]=[[5,6],[7,8]
df = pd.DataFrame(arr, columns=some_list_of_names)
df[some_list_of_names] = myfunction(arr)
In [11]: df = pd.DataFrame([[1, 2.], [3, 4.]], columns=['a', 'b'])

In [12]: df.values = [[5, 6], [7, 8]]
AttributeError: can't set attribute

In [13]: df[['a', 'b']] = [[5, 6], [7, 8]]

In [14]: df
Out[14]:
   a  b
0  5  6
1  7  8

In [15]: df[['b', 'a']] = [[5, 6], [7, 8]]

In [16]: df
Out[16]:
   a  b
0  6  5
1  8  7