Заменить часть строки информационного кадра pandas массивом - PullRequest
0 голосов
/ 15 марта 2019

У меня есть датафрейм 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.

Буду признателен за любые идеи, как это сделать.

Спасибо.

1 Ответ

0 голосов
/ 15 марта 2019

Вам нужно изменить форму массива x, так как его форма равна (n, 1), где n - длина всех ваших esv-подобных столбцов.

Измените строку: df1.iloc[i, 1:] = x на

df1.iloc[i, 1:] = x.squeeze()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...