如果我像这样创建一个 Dataframe :
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?换句话说,如何完全基于索引替换单元格?
0mkxixxg1#
使用loc:
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解决方案。
ix
vxf3dgd42#
除了其他答案外,如果您有一个单个指数列表,您还可以执行以下操作:
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
brqmpdu13#
另一个解决方案是
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
mbyulnm04#
非常有趣的观察结果是,下面的代码确实更改了原始 Dataframe 中的值
df.loc[0:15,'A'] = 16
但是如果你使用类似的代码
df.loc[0:15]['A'] = 16
那么它只给予一个副本你的 Dataframe 与改变的值和不改变原来的 df 对象的值。希望这将保存一些时间的人处理这个问题。
bkhjykvo5#
您能否将该列的值更新为-1.0,而不是16?对我来说,它返回255而不是-1.0。
>>> effect_df.loc[3:5, ['city_SF', 'city_Seattle']] = -1.0 Rent city_SF city_Seattle 0 3999 1 0 1 4000 1 0 2 4001 1 0 3 3499 255 255 4 3500 255 255 5 3501 255 255 6 2499 0 1 7 2500 0 1 8 2501 0 1
mfuanj7w6#
致疯狂物理学家:首先你需要将列的数据类型从短整型改为浮点型。2看起来你的-1.0被转换成了短整型。
6条答案
按热度按时间0mkxixxg1#
使用
loc
:不推荐使用
ix
解决方案。vxf3dgd42#
除了其他答案外,如果您有一个单个指数列表,您还可以执行以下操作:
输出:
brqmpdu13#
另一个解决方案是
输出:
mbyulnm04#
非常有趣的观察结果是,下面的代码确实更改了原始 Dataframe 中的值
但是如果你使用类似的代码
那么它只给予一个副本你的 Dataframe 与改变的值和不改变原来的 df 对象的值。希望这将保存一些时间的人处理这个问题。
bkhjykvo5#
您能否将该列的值更新为-1.0,而不是16?对我来说,它返回255而不是-1.0。
mfuanj7w6#
致疯狂物理学家:首先你需要将列的数据类型从短整型改为浮点型。2看起来你的-1.0被转换成了短整型。