Как получить доступ к значению в словаре Python из Pandas фреймов данных, изменить фрейм данных и обновить значение словаря - PullRequest
0 голосов
/ 28 марта 2020

Совершенно новый для Python, особенно словари и не может найти ничего, конкретно c о том, что я пытаюсь сделать.

По сути, у меня есть OrderedDict Pandas Dataframes (куча из листов Excel, которые я прочитал и преобразовал в кадры данных), и я хотел бы получить индивидуальный доступ к этим кадрам данных, изменить их, а затем обновить их в OrderedDict, но не совсем уверен, как это сделать.

Как уже говорилось, Я довольно новичок в этом, поэтому я знаю, как обновить фрейм данных, но не как сохранить его обратно в словаре. В настоящее время мой код выглядит следующим образом:

for sheet in cons_excel_sheets:
    df = cons_excel_sheets[sheet]
    row = df[df['Row Labels'] == 'Grand Total'].index.tolist()[0]
    df = df.iloc[:row - 1]
    cleaned_dataframes_list.update(df)

Это возвращает следующую ошибку (это работает, если я обновляю только один кадр данных за раз, т.е. без for l oop):

    Traceback (most recent call last):
  File "C:\Users\USER\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-4-38dbbba27fa0>", line 5, in <module>
    row = df[df['Row Labels'] == 'Grand Total'].index.tolist()[0]
IndexError: list index out of range

Не уверен, как исправить эту ошибку, а также сомневаюсь, что я корректно обновляю OrderedDict в конце для l oop.

Есть идеи?

1 Ответ

0 голосов
/ 28 марта 2020

Вы можете попробовать это с некоторыми примерами данных:

#DataFrames generated from the excel files
value_df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns= 
            ['a', 'b', 'c'])
value_df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns= 
            ['a', 'b', 'c'])
value_df3 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns= 
            ['a', 'b', 'c'])                   

#Making a Dictionary of the Dataframes
dict = {
  "key0": value_df1,
  "key1": value_df2,
  "key2": value_df3
}

#Accessing an element in a particular DataFrame (e.g. value_df2 - column b)
tempDataFrame = dict[key1]
tempDataFrame = tempDataFrame['b']

#Iterate through dictionary and update value(s) in a DataFrame(e.g. value_df3 - setting column a values to 0)
for k,val in  dict:
    tempDataFrame = dict[k]
    tempDataframe['a'] = 0
    dict[k] = tempDataFrame

Я надеюсь, что это отвечает на ваш вопрос.

...