我正在使用 json_normalize 将单行数据“ 扩展”分成多行-使用原始行和扩展行中的数据填充列-数据。
在一种情况下,我在原始数据框中具有相同的列名,和正在分解并重新加入的数据。
可以理解,我收到的最初错误是:
ValueError: columns overlap but no suffix specified: Index(['details'], dtype='object')
但是,指定后缀(“ _right”)会产生类似于以下内容的输出:
status details details_right
0 A 752016134
1 A 752016134
2 A 835847477
3 A 405296228
4 A 193753632
5 B 667711915
6 A 305304644
我正在寻找:
status details
0 A 752016134
1 A 752016134
2 A 835847477
3 A 405296228
4 A 193753632
5 B 667711915
6 A 305304644
我正在使用的代码:
newdataframe = (pd.concat({i: json_normalize(block) for i, block in dataframe1.pop('data').items()})
.reset_index(level=1, drop=True)
.join(dataframe1, how='right', rsuffix='_right')
.reset_index(drop=True))
-
检查pandas API参考,似乎是这样做的唯一方法,是在创建结果数据框之后重命名/连接列。
但是,我想在新的数据框创建步骤中执行此操作,这样,如果存在另一个重复的列,则无需“硬编码”任何列/修复程序的详细信息。
请告诉我是否有更好的方法来做我想要的事情。
谢谢!请让我知道是否可以澄清任何事情!
答案 0 :(得分:2)
combine_first应该可以工作:
newdataframe = (pd.concat({i: json_normalize(block) for i, block in dataframe1.pop('data').items()})
.reset_index(level=1, drop=True)
.combine_first(dataframe1)
.reset_index(drop=True))
但是也许我的逻辑有误,您需要使用combine
。