Как напечатать единственную непустую ячейку в кадре данных размером 1 x 50? питон

1

У меня есть сценарий, который генерирует DataFrames с 1 строкой и 50 столбцами. Каждая ячейка каждого DataFrame содержит строку. Однако, за исключением одной ячейки, все эти строки не содержат элементов, поэтому они выглядят так: ''. В результате каждый DataFrame выглядит примерно так:

    Col 1        Col 2  ...  Col 49        Col 50
0                            "Here it is."

Только одна из ячеек может содержать полное предложение (то есть в столбце 49 в этом случае), но неизвестно, что такое предложение и в каком столбце он находится. И я хочу вернуть только это предложение. Что такое простой способ сделать это?

  • 0
    Вы знаете предложение раньше?
  • 0
    Нет, я не знаю этого заранее.
Показать ещё 5 комментариев
Теги:
pandas
python-3.x

3 ответа

1
Лучший ответ

Если вы используете серию вместо этого, легко фильтровать одну ячейку с непустым элементом:

import pandas as pd

df = pd.DataFrame({'col1': [""], 'col2': [""], 'col3': [""], 'col4': ["some words"], 'col5': [""]})
s = df.T[0]
sentence = s[s != ""]

Это переносит блок данных, а затем преобразует его в серию. Это, конечно, проще и быстрее, если вы можете хранить данные в серии в первую очередь.
Или, как указывает RafaelC в комментарии: избегайте хранить все пустые строки в первую очередь и храните непустую строку непосредственно в вашей переменной, полностью пропуская фрейм данных.

  • 0
    Это работает, спасибо!
2

Используйте тот факт, что пустые строки ложны

df.at[0, df.loc[0].astype(bool).idxmax()]
  • 0
    Это тоже работает.
0

Вот одно решение. Учитывая этот сценарий

import pandas as pd

row = ['' for i in range(50)]
row[34] = 'Raining somewhere'
pdf = pd.DataFrame([row])

который выглядит

In [5]: print(pdf)
  0  1  2  3  4  5  6  7  8  9  ... 40 41 42 43 44 45 46 47 48 49
0                               ...                              

[1 rows x 50 columns]

Мы можем получить кадр данных, который содержит столбцы с записями, которые не являются '' с

pdf[pdf !=''].dropna(axis = 1)

который возвращается

                  34
0  Raining somewhere

Если вы просто хотите, чтобы строка

pdf[pdf !=''].dropna(axis = 1).values[0][0]

возвращается

'Raining somewhere'

Это предполагает, что в кадре данных есть только одна такая строка. Если вы не хотите использовать pdf != '' Вы всегда можете использовать

import numpy as np
pdf.replace('',np.nan).dropna(axis = 1).values[0][0]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню