"与iloc相对应的功能" as" at to loc"对于熊猫

时间:2017-12-12 18:03:33

标签: python pandas dataframe

我知道我可以使用at来强有力地设置特定单元格的值:

index = "a"
df.at[index,"some_list"] = []

请注意,无法使用loc,因为

df.loc[index,"some_list"] = []

导致错误

ValueError: Must have equal len keys and value when setting with an iterable

问题是,有时,索引不是唯一的,但我知道设置值的确切iloc。因此,我需要做的是

df.iloc[some_number_1,some_number_2] = []

但这会导致

ValueError: Must have equal len keys and value when setting with an iterable

是否有一些与iloc对应,以便我可以设置值?

例如

df.at_iloc[some_number_1,some_number_2] = []

谢谢。

注意:这个问题没有重复,因为我需要loc的变种,结果是... ...

2 个答案:

答案 0 :(得分:2)

您正在寻找iat

In [7]: df
Out[7]:
   0  1
a  1  9
b  7  7
a  2  0
c  1  8
b  6  7

In [8]: df.iat[0,1]
Out[8]: 9

你仍然需要以某种方式循环,它永远不会干净地使用object-dtypes和使用list对象,因为pandas倾向于将它们视为序列而不是标量,所以像这样:

In [9]: for i, b in enumerate(df.index.get_loc('a')):
    ...:     if b:
    ...:         df.iat[i, 1] = []
    ...:

In [10]: df
Out[10]:
   0   1
a  1  []
b  7   7
a  2  []
c  1   8
b  6   7

再次注意object-dtypes的巨大红旗:

In [18]: df.dtypes
Out[18]:
0    object
1    object
dtype: object

答案 1 :(得分:2)

您必须小心了解ilocloc之间的细微差别 在Pandas数据帧中选择行时,iloc维护隐式的python样式索引。然而,loc使用Dataframe的显式索引。

话虽如此,要知道使用iloc进行自然排序时数据框记录的值,您只需执行以下操作:

df.iloc[some_number_1] = some_number_2

举个例子,

import pandas as pd
a = pd.DataFrame({'a': [1, 3, 5, 7, 9], 'b': [2, 4, 6, 8, 0]},
                  index = [1,3,4,4,5])

   a  b
1  1  2
3  3  4
4  5  6
4  7  8
5  9  0

假设我们想要使用iloc

更改第一个自然索引的值
a.iloc[1] = [12, 13]

    a   b
1   1   2
3  12  13
4   5   6
4   7   8
5   9   0