У меня есть датафрейм df1
, который выглядит так:
Sample_names esv0 esv1 esv2 ... esv918 esv919 esv920 esv921
0 pr1gluc8NH1 2.1 3.5 6222 ... 0 0 0 0
1 pr1gluc8NH2 3189.0 75.0 9045 ... 0 0 0 0
2 pr1gluc8NHCR1 0.0 2152.0 12217 ... 0 0 0 0
3 pr1gluc8NHCR2 0.0 17411.0 1315 ... 0 1 0 0
4 pr1sdm8NH1 365.0 7.0 4117 ... 0 0 0 0
5 pr1sdm8NH2 4657.0 18.0 13520 ... 0 0 0 0
6 pr1sdm8NHCR1 0.0 139.0 3451 ... 0 0 0 0
7 pr1sdm8NHCR2 1130.0 1439.0 4163 ... 0 0 0 0
Я хочу выполнить некоторые операции со строками и заменить их через цикл for.
for i in range(len(df1)):
x=df1.iloc[i].values ### gets all the values corresponding to each row
x=np.vstack(x[1:]).astype(np.float) ####converts object type to a regular 2D array for all row elements except the first, which is a string.
x=x/np.sum(x) ###normalize to 1
df1.iloc[i,1:]=x ###this is the step that should replace part of the old row with the new array.
Но при этом я получаю ошибку «ValueError: Должны иметь равные ключи len и значение при установке с помощью ndarray». x имеет одинаковую длину с каждой строкой df1 - 1 (я не хочу заменять первый столбец, Sample_names)
Я тоже пытался df1=df1.replace(df1.iloc[i,1:],x)
. Это дает TypeError: значение аргумента должно быть скалярным, dict или Series.
Буду признателен за любые идеи, как это сделать.
Спасибо.