Python при слиянии датафреймов переименовывает столбцы по ключам словарей - PullRequest
0 голосов
/ 28 августа 2018

Изначально у меня есть пустой фрейм данных с полем даты, а позже я пытаюсь объединить его с новым фреймом данных в цикле for.

com_df = pd.DataFrame(columns=['date'])
    for i in data_dict.values():
        response = requests.get('www.example.com/' + i + '?format=json')
        data = json.loads(response.content.decode('utf-8'))
        df = dataframe_format(data[1]) // convert list of dict to dataframe
        com_df = pd.merge(com_df, df, on='date', how='outer')

Таким образом, вывод пока такой,

    date       value_x       value_y  value_x     value_y       value
0   2017  1.722333e+13  8.711267e+12   3485.0  197.713256   46.030025
1   2016  1.829506e+13  7.320738e+12   3052.0  249.907289   -2.024998
2   2015  3.932602e+13  8.188019e+12   2827.0  480.287296   -6.007182

Но я хочу, чтобы имя столбца было ключами словаря ниже,

data_dict = {'A': '1','B': '2','C': '3','D': '4','E': '5'}

то есть

    date           A              B        C            D       E 
0   2017  1.722333e+13  8.711267e+12   3485.0  197.713256   46.030025
1   2016  1.829506e+13  7.320738e+12   3052.0  249.907289   -2.024998
2   2015  3.932602e+13  8.188019e+12   2827.0  480.287296   -6.007182

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я бы преобразовал ваш входной словарь в один индекс соответствия для имени столбца:

data_dict = {'A': '1','B': '2','C': '3','D': '4','E': '5'}
pos_col_dict = {int(v): k for k, v in data_dict.items()}

Затем присвойте столбцам NumPy. Вы должны использовать копию, чтобы избежать побочных эффектов:

arr = df.columns.values
arr[list(pos_col_dict)] = list(pos_col_dict.values())
df.columns = arr
0 голосов
/ 28 августа 2018

Если вы хотите применить словарные ключи, отсортированные по их значениям, то вы можете сделать это:

df.columns = [df.columns[0]] \
           + [k for k,_ in sorted(data_dict.items(), key=lambda x:x[1])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...