【发布时间】:2020-09-26 20:56:55
【问题描述】:
我正在使用 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))
- dataframe1 被扩展,使用“data”列中包含的 json 数据
- dataframe1 和“data”都包含一个名为“details”的列,我想“合并”
--
检查 pandas API 参考,似乎唯一的方法是在创建结果数据框之后重命名/连接列。
但是,我想在新的数据框创建步骤中执行此操作,以便如果有 另一个 重复列,我不需要“硬编码”任何列/修复详细信息。
如果有更好的方法来做我正在寻找的事情,请告诉我。
谢谢!如果我能澄清任何事情,请告诉我!
【问题讨论】:
-
你试过how='left'而且没有后缀吗?
-
@SyKer combine_first 似乎已经成功了。 how='left' 没有拉出我需要的行。
标签: python pandas dataframe join