Pandas -根据索引替换值

xam8gpfp  于 2023-01-19  发布在  其他
关注(0)|答案(6)|浏览(167)

如果我像这样创建一个 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?换句话说,如何完全基于索引替换单元格?

0mkxixxg

0mkxixxg1#

使用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解决方案。

vxf3dgd4

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
brqmpdu1

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
mbyulnm0

mbyulnm04#

非常有趣的观察结果是,下面的代码确实更改了原始 Dataframe 中的值

df.loc[0:15,'A'] = 16

但是如果你使用类似的代码

df.loc[0:15]['A'] = 16

那么它只给予一个副本你的 Dataframe 与改变的值和改变原来的 df 对象的值。希望这将保存一些时间的人处理这个问题。

bkhjykvo

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
mfuanj7w

mfuanj7w6#

致疯狂物理学家:首先你需要将列的数据类型从短整型改为浮点型。2看起来你的-1.0被转换成了短整型。

相关问题