У меня есть данные с несколькими числами в каждой строке, например:
gene numbers
P53 11 11 11 7 13 8 8
ACE 6 5 4 5 3
BRCA 2 2 1
Я хочу, чтобы столбец чисел содержал только наименьшее число, которое находится в этой строке, с выводом, например:
gene numbers
P53 8
ACE 3
BRCA 1
Я просмотрел другие ответы здесь, но большинство из них предназначены для сортировки нескольких строк и поиска наименьшего числа в столбце, а не в одной строке. Например, я пытался использовать:
data = pd.read_csv('data.csv', header=0)
data = data.drop(["gene"],1)
df = pd.DataFrame(data)
matrix = df.as_matrix()
result1 = list(map(min, matrix))
result2 = list(map(min, zip(*matrix)))
Однако это дает ошибку, которая:
TypeError: '<' not supported between instances of 'float' and 'str'
Любая помощь/рекомендации будут оценены.
Спасибо за ваше предложение, к сожалению, это не меняет вывод исходного формата. У меня есть данные в
Если есть только столбец numbers
, заполненный числами, разделенными сначала пробелом split
, то преобразуйте в целые числа и получите min
:
df['numbers'] = df['numbers'].apply(lambda x: min(map(int, x.split())))
print (df)
gene numbers
0 P53 7
1 ACE 3
2 BRCA 1
Другое решение:
df['numbers'] = df['numbers'].str.split(expand=True).astype(float).min(axis=1).astype(int)
print (df)
gene numbers
0 P53 7
1 ACE 3
2 BRCA 1
Привет, спасибо за это, первый выдает ошибку о строках, а второй выдает: ValueError: невозможно преобразовать неконечные значения (NA или inf) в целое число - могу ли я что-нибудь сделать, чтобы обойти это?
@ DN1 - да, если удалить .astype(int)
, это работает? df['numbers'] = df['numbers'].str.split(expand=True).astype(float).min(axis=1)
?
@ DN1 - Причина не работала, потому что некоторые NaN
s, поэтому проблематично конвертировать в целые числа.
data.min(axis=1)
должно работать