据我所知,我可以用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的at变体,结果是iat.
发布于 2017-12-12 18:31:05
你在找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你仍然需要循环,因为熊猫总是把它们当作序列而不是标量对待,所以它从来不干净地处理对象-dtype和使用list对象,所以这样的事情:
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同样,请注意对象-dtype的巨大红旗:
In [18]: df.dtypes
Out[18]:
0 object
1 object
dtype: object发布于 2017-12-12 18:33:56
您必须小心地了解iloc和loc之间的细微差别。
iloc在选择Pandas中的行时保持隐式python风格的索引。然而,loc使用Dataframe的显式索引。
尽管如此,在知道使用iloc的自然排序时,要更改dataframe记录的值,您可以简单地这样做:
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 0https://stackoverflow.com/questions/47778895
复制相似问题