如果之前有人问过道歉,我似乎无法找到答案。
如果我创建一个这样的数据框:
import pandas as pd, numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(100, 2)), columns=list('AB'))
例如,如何将A列中的条目更改为行0 -15中的数字16?换句话说,我如何完全基于索引替换单元格?
答案 0 :(得分:31)
使用loc
:
df.loc[0:15,'A'] = 16
print (df)
A B
0 16 45
1 16 5
2 16 97
3 16 58
4 16 26
5 16 87
6 16 51
7 16 17
8 16 39
9 16 73
10 16 94
11 16 69
12 16 57
13 16 24
14 16 43
15 16 77
16 41 0
17 3 21
18 0 98
19 45 39
20 66 62
21 8 53
22 69 47
23 48 53
ix
的解决方案是deprecated。
答案 1 :(得分:2)
另一个解决方案是
df.at[0:15, 'A']=16
print(df.head(20))
输出:
A B
0 16 44
1 16 86
2 16 97
3 16 79
4 16 94
5 16 24
6 16 88
7 16 43
8 16 64
9 16 39
10 16 84
11 16 42
12 16 8
13 16 72
14 16 23
15 16 28
16 18 11
17 76 15
18 12 38
19 91 6
答案 2 :(得分:2)
除了其他答案之外,如果您拥有各个索引的列表,则可以执行以下操作:
indices = [0,1,3,6,10,15]
df.loc[indices,'A'] = 16
print(df.head(16))
输出:
A B
0 16 4
1 16 4
2 4 3
3 16 4
4 1 1
5 3 0
6 16 4
7 2 1
8 4 4
9 3 4
10 16 0
11 3 1
12 4 2
13 2 2
14 2 1
15 16 1
答案 3 :(得分:2)
非常有趣的观察,下面的代码确实改变了原始数据帧中的值
df.loc[0:15,'A'] = 16
但是如果你使用类似这样的代码
df.loc[0:15]['A'] = 16
它只会返回具有更改值的数据框的副本,并且不会更改原始 df 对象中的值. 希望这会为处理此问题的人节省一些时间。