#python #pandas
#python #pandas
Вопрос:
У меня есть однозначное соответствие между значениями словаря d
и df1
к которому я создал фрейм данных из добавленных элементов.
Строка df11
в настоящее время жестко запрограммирована, потому что я знаю количество ключей в моем d
, т.Е. Я специально пишу append 3 раза с соответствующим df.loc[n]
in df11
Ввод:
Sn=['1','2','3']
Dn=['X','Y','Z']
d={}
for num1 in Sn:
for num2 in Dn:
key = f'Sn{num1}{num2}'
value = pd.DataFrame({'A':[f'-{num1}O{num2}-']})
d[key] = value
df1 = pd.DataFrame({'A':[45,23,76]})
df11=d['Sn1X'].append(df1.loc[0]).append(d['Sn1Y']).append(df1.loc[1])
Вывод: df1
A
0 45
1 23
2 76
Вывод: df11
A
0 -1OX-
0 45
0 -1OY-
1 23
Как бы я применил логику df11
к n
количеству ключей, указанных в словаре / df1?
Например, мне пришлось бы добавить дополнительные добавления, чтобы получить последнюю строку в ‘df1`
dfF=d['Sn1X'].append(df1.loc[0]).append(d['Sn1Y']).append(df1.loc[1]).append(d['Sn1Z']).append(df1.loc[2])
Вывод: dfF
A
0 -1OX-
0 45
0 -1OY-
1 23
0 -1OZ-
2 76
Комментарии:
1. Зачем вам нужен словарь? Если у вас есть некоторый контент в виде списков, логически должно быть возможно получить желаемый результат в dataframe. Я думаю, было бы полезно, если бы вы могли вместо этого объяснить, чего вы пытаетесь достичь
2. потому что мои реальные данные будут содержать 54 ключа,
d
а мои входные фреймы данных поступают из таблиц Excel. Элементы вdf1
фактически будут представлять собой серию, извлеченную из таблиц Excel. Мой опубликованный вопрос максимально упрощен.3. Я ищу способ применить логику к
dfF
Ответ №1:
Если я вас правильно понял, все, что вам нужно, это обобщенный код, который может обрабатывать n
количество ключей.
Этот фрагмент кода должен сделать свое дело
tmp = pd.Series([], dtype=object)
keys = list(d.keys())
for i, cell in enumerate(df1.iterrows()):
# d[keys[i]] contains a Dataframe
# cell[1] contains a series
# you append these together and then keep appending to an empty series 'tmp'
tmp = tmp.append(d[keys[i]].append(cell[1])) # updated
tmp.drop(columns=0, inplace=True)
#tmp.reset_index(drop=True, inplace=True)
print(tmp)
Вывод
A
0 -1OX-
0 45
0 -1OY-
1 23
0 -1OZ-
2 76
Комментарии:
1. это выглядит многообещающим только потому, что я получаю сообщение об ошибке
list object is not callable
дляkeys = list(d.keys())
2. убедитесь, что у вас нет переменной с именем list , это ключевое слово в python, и вы будете затенять его
3. это работает! Отлично, теперь я изучу код. Возможно, у меня будут вопросы позже. Спасибо!
4. Не могли бы вы объяснить, что конкретно делает эта строка
for i, cell in enumerate(df.iterrows()):
cell
. Я не вижу, чтобы она вызывалась где угодно…5. Вы могли бы заменить
df1.loc[i]
наcell
. Должно быть, я забыл