我知道我可以使用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的变种,结果是... ...
答案 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)
您必须小心了解iloc
和loc
之间的细微差别
在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