Python 在pandas中使用.at[]和.iat[]访问器

Python 在pandas中使用.at[]和.iat[]访问器,python,pandas,Python,Pandas,每当我在jupyter笔记本控制台上迭代pandas系列以使用set_值修改值时,我都会得到以下警告:set_值已被弃用,将在将来的版本中删除。请改用.at[]或.iat[]访问器 如何在循环中使用.at[]或.iat[] s = pd.Series([100 , 120.0 , 101.0 , 3.0 ]) for l , v in s.iteritems(): s.set_value(l, v + 4) 你想要的是: In [14]: import pandas as pd In

每当我在jupyter笔记本控制台上迭代pandas系列以使用set_值修改值时,我都会得到以下警告:set_值已被弃用,将在将来的版本中删除。请改用.at[]或.iat[]访问器

如何在循环中使用.at[]或.iat[]

s = pd.Series([100 , 120.0 , 101.0 , 3.0 ])
for l , v in s.iteritems():
    s.set_value(l, v + 4)

你想要的是:

In [14]: import pandas as pd

In [15]: s = pd.Series([100 , 120.0 , 101.0 , 3.0 ])
    ...:

In [16]: for l, v in s.iteritems():
    ...:     s.at[l] = v + 4
    ...:

In [17]: s
Out[17]:
0    104.0
1    124.0
2    105.0
3      7.0
dtype: float64
然而,这是非常非泛音速的,相反,您应该始终更喜欢矢量化操作:

In [18]: s = pd.Series([100 , 120.0 , 101.0 , 3.0 ])
    ...:

In [19]: s += 4

In [20]: s
Out[20]:
0    104.0
1    124.0
2    105.0
3      7.0
dtype: float64

你想要的是:

In [14]: import pandas as pd

In [15]: s = pd.Series([100 , 120.0 , 101.0 , 3.0 ])
    ...:

In [16]: for l, v in s.iteritems():
    ...:     s.at[l] = v + 4
    ...:

In [17]: s
Out[17]:
0    104.0
1    124.0
2    105.0
3      7.0
dtype: float64
然而,这是非常非泛音速的,相反,您应该始终更喜欢矢量化操作:

In [18]: s = pd.Series([100 , 120.0 , 101.0 , 3.0 ])
    ...:

In [19]: s += 4

In [20]: s
Out[20]:
0    104.0
1    124.0
2    105.0
3      7.0
dtype: float64

不确定我是否理解在您统一修改整个系列时使用set_值或iat的目的。不确定我是否理解在您统一修改整个系列时使用set_值或iat的目的。附带问题是使用基础numpy数组(s.values)设置值是一种不好的做法(非泛音)?@DanielMesejo我的意思是,我真的没有理由这么做。我必须考虑一个特定的用例。您将在阵列上使用的大多数操作仅通过pandas数据帧传递,尽管有时开销不大。从根本上说,问题在于您应该更喜欢矢量化操作,而不是手动的python级循环。@DanielMesejo在使用
.values
赋值时应该小心,因为它不再使用索引进行对齐。在这种情况下,数组的第一个值被分配给第一个索引。当您使用
.groupby
.sort\u值
输出的序列的索引顺序与原始序列不同时,这可能会出现问题。@ALollz此外,我认为在某些情况下,它不会修改
pandas
对象。比如说,如果在
数据帧中有混合的数据类型
。作为一个附带问题,使用底层numpy数组(s.values)来设置值是一种不好的做法(unpandonic)?@DanielMesejo我的意思是,我真的看不出有理由这样做。我必须考虑一个特定的用例。您将在阵列上使用的大多数操作仅通过pandas数据帧传递,尽管有时开销不大。从根本上说,问题在于您应该更喜欢矢量化操作,而不是手动的python级循环。@DanielMesejo在使用
.values
赋值时应该小心,因为它不再使用索引进行对齐。在这种情况下,数组的第一个值被分配给第一个索引。当您使用
.groupby
.sort\u值
输出的序列的索引顺序与原始序列不同时,这可能会出现问题。@ALollz此外,我认为在某些情况下,它不会修改
pandas
对象。比方说,如果在
数据帧中有混合数据类型