#python #pandas
#python #pandas
Вопрос:
Я читаю файл Excel, но для целей этого вопроса я приведу пример того, как выглядит мой dataframe. У меня есть dataframe
вот так:
df = pd.DataFrame([
['Texas 1', '111', '222', '333'],
['Texas 1', '444', '555', '666'],
['Texas 2', '777','888','999']
])
df[2] = df[2].replace('222', '')
0 1 2 3
a Texas 1 111 333
b Texas 1 444 555 666
c Texas 2 777 888 999
И я хочу иметь возможность определять мультииндекс на основе значений первой строки, которые не являются пустыми.
Итак, что-то вроде этого:
0 1 3
Texas 1 111 333 444 555 666
Texas 2 111 333 777 888 999
Проблема в том, что значения в строке a
не всегда будут находиться в одном столбце, поэтому мне нужен способ найти, какие столбцы имеют значение в первой строке, и использовать номер этого столбца в качестве индекса. До сих пор я читал свой файл Excel следующим образом:
df1 = pd.read_excel('excel.XLS', index_col=[1,11,24,37])
И я искал способ прочитать ячейки, которые не являются NaN
и находятся в row a
, и найти их номер столбца для сохранения в списке и использовать его как для моего index_col=()
. Но я не могу понять, как. Любые указатели в правильном направлении были бы потрясающими!
Комментарии:
1. Я просто не понимаю, чего вы хотите
2. @Noobie Я хочу иметь возможность сохранять в
list
номер столбца для каждой ячейки, вRow a
которой нетNaN
. Таким образом, я смогу указать, какие столбцы я хочу использовать в качестве мультииндекса, поскольку столбцы не всегда будут одинаковыми
Ответ №1:
прежде всего, вы говорите «где не NaN», но вы replace
с ''
.
Я заменю ''
на np.nan
then dropna
df.iloc[0].replace('', np.nan).dropna().index
Int64Index([0, 1, 3], dtype='int64')
df[df.iloc[0].replace('', np.nan).dropna().index]
Комментарии:
1. Спасибо,
df[df.iloc[0].replace('', np.nan).dropna().index]
это то, что мне было нужно. Я использовалdf
, который это создало, чтобы получитьlist
столбцы, которые имеют значения в первой строке (или второй из-за заголовка), а затем я использовал это вdf1 = pd.read_excel('excel.XLS', index_col=[1,11,24,37])
для заменыindex_col
значений. Это сработало2. @rubito подумайте о том, чтобы отметить это как ответ, если вы считаете, что это уместно.