首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >绕过pandas objects错误"Reindexing only valid with only valued objects“

绕过pandas objects错误"Reindexing only valid with only valued objects“
EN

Stack Overflow用户
提问于 2017-07-25 13:15:22
回答 1查看 859关注 0票数 1

我有3个数据帧,包括来自同一组的信息,现在我正在尝试通过它们的组来concate这些数据帧,通过set_index作为组名,但因为df1包含的索引不是唯一的,所以我无法对它们执行concate。有什么方法可以绕过它吗?

输入df的样本:

代码语言:javascript
运行
复制
df1:
group     A       B
 cat      1       0 
 cat      2       7
 cat      5       5
 dog      0.4     1
 dog      2       4
 dog      8       7 
 seal     7       5
 seal     1       8
 seal     7       9

df2:
group     C       D
 cat      1       3
 seal     0       5    
 dog      3       4

df3:
group     E       F
 cat      1       5
 dog      0       3 
 seal     5       9

想要的输出:

代码语言:javascript
运行
复制
group     A       B       C        D       E      F
 cat      1       0       1        3       1      5
 cat      2       7       1        3       1      5
 cat      5       5       1        3       1      5
 dog      0.4     1       3        4       0      3
 dog      2       4       3        4       0      3
 dog      8       7       3        4       0      3 
 seal     7       5       0        5       5      9
 seal     1       8       0        5       5      9
 seal     7       9       0        5       5      9

我的代码:

代码语言:javascript
运行
复制
 df1 = pd.read(file).set_index('group')
 df2 = pd.read(file).set_index('group')
 df3 = pd.read(file).set_index('group')

 all_data = pd.concate(df1, df2, df3, axis = 1).reset_index()

错误:

代码语言:javascript
运行
复制
 pandas.core.indexes.base.InvalidIndexError: Reindexing only valid with uniquely valued Index objects

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 13:20:03

我认为你可以先使用df2df3concat,如果大小相同,再使用join

代码语言:javascript
运行
复制
df = pd.concat([df2.set_index('group'), df3.set_index('group')], axis = 1)
all_data = df1.join(df, on='group')
print (all_data)
  group    A  B  C  D  E  F
0   cat  1.0  0  1  3  1  5
1   cat  2.0  7  1  3  1  5
2   cat  5.0  5  1  3  1  5
3   dog  0.4  1  3  4  0  3
4   dog  2.0  4  3  4  0  3
5   dog  8.0  7  3  4  0  3
6  seal  7.0  5  0  5  5  9
7  seal  1.0  8  0  5  5  9
8  seal  7.0  9  0  5  5  9

也可以在read_csv中使用参数index_col来代替set_index

代码语言:javascript
运行
复制
df1 = pd.read(file)
df2 = pd.read(file, index_col='group')
df3 = pd.read(file, index_col='group')

df = pd.concat([df2, df3], axis = 1)
all_data = df1.join(df, on='group')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45294446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档