#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:]]