Python 使用numpy数组修改数据帧值
我试图用numpy数组[相同大小]修改pandas数据帧的values字段。像这样的事情是行不通的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,系列
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