У меня есть лист Excel, где заголовки (TradeDate, Value) расположены друг над другом, разделенные типом (ABS, MBS), пример формата:
ABS,
TradeDate,Value
2019-01-21,21
2019-01-22,22
MBS,
TradeDate,Value
2019-01-21,11
2019-01-22,12
2019-01-23,13
Как я могу загрузить это в python, желательно pandas или другой пакет, где я загружаю каждый заголовок отдельно? Заголовки уникальны/одинаковы для каждого типа, а индекс заголовков может меняться. Используя приведенный выше пример, я хотел бы вернуть два отдельных фрейма данных или объектов.
df_abs
TradeDate,Value
2019-01-21,21
2019-01-22,22
и df_mbs
TradeDate,Value
2019-01-21,11
2019-01-22,12
2019-01-23,13
@Erfan Извините, я добавлю таблицу / что-то, что можно скопировать и вставить, stackoverflow сделал это за меня, когда я копировал и вставлял из Excel.
@Erfan обновлен примерами с возможностью копирования и вставки, imgur не должен быть функцией, когда вы копируете и вставляете из Excel на SO.
Это может быть немного чрезмерным, но не смог найти более простого решения:
# Mask all the rows which have a date
m = df[0].str.match('([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))')
# Create an equal indicator on each row which has a date, but stops when value changes so we can groupby
df['ind'] = np.where(~m, 0, (m != m.shift(1)).astype(int).cumsum())
# Extract seperate dataframe into a list
dfs = [d for _, d in df[df.ind.ne(0)].groupby('ind')]
# Rename columns to expected output
dfs = [df.reset_index(drop=True).rename(columns = {0:'TradeDate', 1:'Value'}) for df in dfs]
Выход
for d in dfs:
print(d,'\n')
TradeDate Value ind
0 2019-01-21 21 2
1 2019-01-22 22 2
TradeDate Value ind
0 2019-01-21 11 4
1 2019-01-22 12 4
2 2019-01-23 13 4
Воспроизводимый пример
from io import StringIO
a = StringIO('''
ABS,
TradeDate,Value
2019-01-21,21
2019-01-22,22
MBS,
TradeDate,Value
2019-01-21,11
2019-01-22,12
2019-01-23,13
''')
df = pd.read_csv(a, header=None)
# Out
0 1
0 ABS NaN
1 TradeDate Value
2 2019-01-21 21
3 2019-01-22 22
4 MBS NaN
5 TradeDate Value
6 2019-01-21 11
7 2019-01-22 12
8 2019-01-23 13
Это хорошее решение, если заголовок более сложный, это может быть немного сложно с регулярным выражением, но все равно должно работать.
Я понимаю, о чем вы говорите, это трудно обобщить для сценария Любые. @pyCthon, но этого достаточно, чтобы ваш вопрос был сформулирован как есть.