Как выбрать наименьшее число в одной строке в python?

У меня есть данные с несколькими числами в каждой строке, например:

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'

Любая помощь/рекомендации будут оценены.

data.min(axis=1) должно работать
EdChum 09.04.2019 10:57

Спасибо за ваше предложение, к сожалению, это не меняет вывод исходного формата. У меня есть данные в

DN1 09.04.2019 11:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
295
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если есть только столбец 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 09.04.2019 11:11

@ DN1 - да, если удалить .astype(int), это работает? df['numbers'] = df['numbers'].str.split(expand=True).astype(float).min(axis=‌​1) ?

jezrael 09.04.2019 11:12

@ DN1 - Причина не работала, потому что некоторые NaNs, поэтому проблематично конвертировать в целые числа.

jezrael 09.04.2019 11:26

Другие вопросы по теме