【问题标题】:Python on merging dataframe rename columns by dictionaries keysPython关于通过字典键合并数据框重命名列
【发布时间】:2018-08-28 16:52:01
【问题描述】:

最初,我有一个带有日期字段的空数据框,后来我尝试在 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

【问题讨论】:

  • 一般来说,字典键在 Python 中是不排序的。你怎么知道第二列应该是“A”?还有其他标准吗?还是您想按值对键进行排序?
  • 这样的东西应该可以工作com_df.columns = list(data_dict.keys())
  • @VageEgiazarian 正如我上面所说,一般来说,字典键在 Python 中是不排序的。
  • @DYZ 为什么要排序?如果你想排序com_df.columns = list(data_dict.keys()).sort()
  • @VageEgiazarian list(data_dict.keys()) 允许以任何顺序报告密钥。我不确定这是否是 OP 想要的。我什至不确定他们是否希望按字母顺序对键进行排序,因为为此,不需要定义字典,一个列表就足够了。

标签: python pandas dictionary dataframe


【解决方案1】:

如果您的意图是应用按值排序的字典键,那么您可以这样做:

df.columns = [df.columns[0]] \
           + [k for k,_ in sorted(data_dict.items(), key=lambda x:x[1])]

【讨论】:

  • 感谢@DYZ,但这里的值也可以是任何字符,因此没有机会按值排序
  • 那你想让yes怎么排序?
【解决方案2】:

我会将您的输入字典转换为一个映射索引到列名:

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

【讨论】:

  • 但是我的字典值可以是文本也可以说,{ 'A': 'hello', 'Z':'hi',.}
  • 这一点都不清楚。如果不是位置,这些值代表什么?字典被认为是无序的(除非你使用 Python 3.7+)。
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 2014-03-09
  • 2016-02-22
  • 2021-08-25
  • 2020-08-22
  • 2021-12-28
  • 2019-01-10
  • 1970-01-01
相关资源
最近更新 更多