如何在熊猫中连接数据框?
Posted
技术标签:
【中文标题】如何在熊猫中连接数据框?【英文标题】:How to concat a dataframe in pandas? 【发布时间】:2016-03-09 13:29:20 【问题描述】:我通过 pymongo 从 mongoDB 获取数据到 python,然后将其转换为 pandas 数据帧
df = pd.DataFrame(list(db.dataset2.find()))
这就是数据在 mongoDB 中的样子。
"dish" : [
"dish_id" : "005" ,
"dish_name" : "Sandwitch",
"dish_price" : 50,
"coupon_applied" : "Yes",
"coupon_type" : "Rs 20 off"
,
"dish_id" : "006" ,
"dish_name" : "Chicken Hundi",
"dish_price" : 125,
"coupon_applied" : "No",
"coupon_type" : "Null"
],
我想在 pandas 数据框中将菜属性分成两行。这是执行此操作的代码。 (有 3 个菜文件)所以,我正在通过 for 循环对其进行迭代。
for i in range(0,len(df.dish)):
data_dish = json_normalize(df['dish'][i])
print data_dish
但它给了我下面的输出..
coupon_applied coupon_type dish_id dish_name dish_price
0 Yes Rs 20 off 001 Chicken Biryani 120
1 No Null 001 Paneer Biryani 100
coupon_applied coupon_type dish_id dish_name dish_price
0 Yes Rs 40 off 002 Mutton Biryani 130
1 No Null 004 Aaloo tikki 95
coupon_applied coupon_type dish_id dish_name dish_price
0 Yes Rs 20 off 005 Sandwitch 50
1 No Null 006 Chicken Hundi 125
我想以以下格式输出..
coupon_applied coupon_type dish_id dish_name dish_price
0 Yes Rs 20 off 001 Chicken Biryani 120
1 No Null 001 Paneer Biryani 100
2 Yes Rs 40 off 002 Mutton Biryani 130
3 No Null 004 Aaloo tikki 95
4 Yes Rs 20 off 005 Sandwitch 50
5 No Null 006 Chicken Hundi 125
你能帮我解决这个问题吗?在此先感谢:)
【问题讨论】:
你为什么不直接从mangoDB数据创建pd.DataFrame()
?
请考虑向我们提供数据帧的完整样本,以便重现问题。
【参考方案1】:
有
dishes = [json_normalize(d) for d in df['dish']]
df = pd.concat(dishes, ignore_index=True)
【讨论】:
那些不是 3 个不同的数据帧,而是一个数据帧,即由 json_normalize 函数返回。 还有一件事.. 我想根据菜(json 数组)复制数据框中的一些行。菜可能包含 3 道菜。当它只有一个时,我可以通过关注def data_shape(dataframe): data_dish = json_normalize(dataframe['dish'][0]) count = len(data_dish) ## counting dishes ordered new_dataframe = pd.concat([dataframe]*count,ignore_index=True) final_dataframe = pd.concat([new_dataframe,data_dish],axis=1) print final_dataframe
来做到这一点
在此处发布一个新问题供您关注可能会更有成效,在 cmets 中理解起来有点棘手。如果您需要任何其他信息或者您认为上述答案可以接受,请告诉我。【参考方案2】:
您应该能够在列表中获取数据帧列表,然后将它们连接起来。
初始化一个新的数据框:
df = pd.DataFrame()
创建一个空的数据框列表:
dflist = []
循环和附加数据帧
for i in range(0,len(df.dish)):
data_dish = json_normalize(df['dish'][i])
dflist.append(data_dish)
然后将列表连接到完整的数据框中:
df = pd.concat(dflist, ignore_index=True)
【讨论】:
感谢您的 rpl。它正确地添加了索引。但是相同的数据框重复了 3 次。 @user2927983 是的,也许尝试更改其他答案中报告的循环索引。以上是关于如何在熊猫中连接数据框?的主要内容,如果未能解决你的问题,请参考以下文章