python-3.x 如何更改包含在多个列表(每个列表对应一列)中按索引指定的df中的值

oxcyiej7  于 2022-11-26  发布在  Python
关注(0)|答案(2)|浏览(112)

我有一个列表,其中有所有要替换的值的索引。我必须在8个不同的列中用8个不同的列表来更改它们。替换可能是一个简单的字符串。我该如何做呢?我在这个df中有20多个不同的列
例如:

list1 = [0,1,2]
list2 =[2,4]
list8 = ...

替代= '无数据'
| A列|B栏|
| - -|- -|
| 马科斯|彼得|
| 尤利拉|话筒|
| 弗兰|拉蒙|
| 佩德里|加维|
| 奥尔莫|托雷斯|

OUTPUT: 

| Column A | Column B |
| -------- | -------- |
| no data  | peter    |
| no data  | mike     |
| no data  | no data  |
| Pedri    | Gavi     |
| Olmo     | no data  |`
mbyulnm0

mbyulnm01#

DataFrame.loc与压缩列表与列名一起使用:

list1 = [0,1,2]
list2 =[2,4]

L = [list1,list2]
cols = ['Column A','Column B']

sustitution = 'no data'

for c, i in zip(cols, L):
    df.loc[i, c] = sustitution
print (df)
  Column A Column B
0  no data    peter
1  no data     mike
2  no data  no data
3    Pedri     Gavi
4     Olmo  no data
rkttyhzu

rkttyhzu2#

您可以使用基础numpy数组:

list1 = [0,1,2]
list2 = [2,4]

lists = [list1, list2]

col = np.repeat(np.arange(len(lists)), list(map(len, lists)))
# array([0, 0, 0, 1, 1])
row = np.concatenate(lists)
# array([0, 1, 2, 2, 4])

df.values[row, col] = 'no data'

输出量:

Column A Column B
0  no data    peter
1  no data     mike
2  no data  no data
3    Pedri     Gavi
4     Olmo  no data

相关问题