Прочитайте лист excel, начиная с определенного столбца

#python #pandas

Вопрос:

У меня есть книга Excel с несколькими листами, и я пытаюсь импортировать/считывать данные, начиная с любого пустого столбца перед столбцом C.

данные строки выглядят следующим образом

A C
Один Два Три

и я пытаюсь получить данные

C
Два Три

Я не могу использовать usecols, так как положение этой пустой коллы изменяется на каждом листе, который у меня есть в рабочей книге. Таким образом, оптимальным будет всегда начинать с любого пустого столбца, расположенного перед столбцом C

Я пробовал это, но у меня ничего не вышло.

 df = df[df.columns[list(df.columns)[-1]]
 

Я был бы признателен за любые предложения или подсказки. Заранее большое спасибо!

Ответ №1:

Если нужно решение для возврата всех значений, если не существует пустой строки, используйте:

 m1 = df.columns.str.startswith('Unnamed')
m2 = (df.columns == 'C').cumsum() == 0

m = m1 amp; m2

print (df.iloc[:, m[::-1].argmax():])
 

Редактировать:

Решение Pandas для получения столбца до C :

 df = pd.DataFrame({'B':[8, 1,2],
                   'A':[8, 1,2],
                   'C':[1,2,0],
                   'D':[1,2,0]})


df = df.iloc[:, df.columns.get_loc('C')-1:]
print (df)
   A  C  D
0  8  1  1
1  1  2  2
2  2  0  0
 

Если столбец C первый, необходимо max выбрать все столбцы:

 df = pd.DataFrame({'C':[8, 1,2],
                   'D':[1,2,0]})
    
df = df.iloc[:, max(0, df.columns.get_loc('C')-1):]
print (df)
   C  D
0  8  1
1  1  2
2  2  0
 

Решение хорошо работает в первом кадре данных:

 df = df.iloc[:, max(0, df.columns.get_loc('C')-1):]
print (df)
   A  C  D
0  8  1  1
1  1  2  2
2  2  0  0
 

Комментарии:

1. Спасибо за это. Проблема в том, что у меня есть df, есть несколько пустых cols, и меня интересует только пустой col перед C. Есть ли способ читать, начиная с любого пустого столбца, который выпадает перед столбцом C

2. @Kimchi — Ты можешь проверить сейчас?

3. похоже, он не может считывать пустые столбцы при запуске m1

4. @Kimchi — Что print (df.columns.tolist()) такое фрейм данных, в котором не удалось решить проблему?

5. @Kimchi — Ответ был отредактирован.

Ответ №2:

Предполагая, что имя вашего столбца является пустой строкой ( '' ), попробуйте нарезать:

 df.loc[:, '':]
 

Ответ №3:

Спасибо garagnoth за помощь в этом вопросе, в итоге я сделал следующее:

df = df[df[list(df.columns).index('C') - 1:]]