我试图在包含重复索引的两个数据帧上使用pandas concat。
当我尝试连接我的两个数据帧时,我得到以下错误
传递值的形状是(12, 180054),指数暗示(12,10000)。
为了更好地理解这个问题,我创建了两个数据帧:
df1 = pd.DataFrame([{'a':"2018-01-01",'b':2},{'a':"2018-01-01",'b':3},{'a':"2018-01-02",'b':4}],
columns = ['a','b']).set_index('a')
df1.index = pd.to_datetime(df1.index)
看起来像:
b
a
2018-01-01 2
2018-01-01 3
2018-01-02 4
和
df2 = pd.DataFrame([{'a':"2018-01-01",'c':5},{'a':"2018-01-02",'c':6}],columns = ['a','c']).set_index('a')
df2.index = pd.to_datetime(df2.index)
看起来像:
c
a
2018-01-01 5
2018-01-02 6
这与我的原始数据帧也有类似的方面。索引是重复的,并且是日期时间格式。
但是,concat(axis=1)可以很好地创建以下数据帧
b c
a
2018-01-01 2 5
2018-01-01 3 5
2018-01-02 4 6
(这正是我所期望的)
但是,如果我使用:
df3 = pd.DataFrame([{'a':"2018-01-01",'b':2},{'a':"2018-01-01",'b':3},{'a':"2018-01-03",'b':4}],
columns = ['a','b']).set_index('a')
df3.index = pd.to_datetime(df3.index)
看起来像:
b
a
2018-01-01 2
2018-01-01 3
2018-01-03 4
它返回的不是df1
Shape of passed values is (2, 6), indices imply (2, 4)
两者之间唯一的区别是df1的最终日期是2018-01-02,df3的最终日期是2018-01-03。
逻辑上(至少对我来说)它应该返回以下内容:
b c
a
2018-01-01 2 5
2018-01-01 3 5
2018-01-02 Nan 6
2018-01-03 4 Nan
我不明白它如何能够正确地做一个,而不是另一个,因为如果它不能处理重复的索引,它应该在两个上同样失败。
Pandas concat:ValueError:传递的值的形状是blah,索引意味着blah2基本上是同一个问题,但是所有的anaswers都说问题在于重复索引,但是这不是唯一的原因,因为concat确实使用重复的索引。
我想真正了解出了什么问题,以及回避这个问题的方法。
非常感谢
ChuHo回答了如何做到这一点。我试图回答为什么它不起作用:它应该是这个错误。
当两边都有重复的行和唯一的行时,问题似乎会发生。
import pandas as pd
frame_a = pd.DataFrame({'a': ['a1']}, index = [1])
frame_b = pd.DataFrame({'b': ['b1', 'b2', 'b2']}, index = [1,2,2])
frame_c = pd.DataFrame({'c': ['c3', 'c3']}, index = [3,3])
pd.concat([frame_a,frame_b], axis=1) # works
a b
1 a1 b1
2 NaN b2
2 NaN b2
pd.concat([frame_a,frame_c], axis=1) # fails
ValueError: Shape of passed values is (5, 2), indices imply (3, 2)
你需要做一个外部连接:df3.join(df2, how='外')
b c
a
2018-01-01 2.0 5.0
2018-01-01 3.0 5.0
2018-01-02 NaN 6.0
2018-01-03 4.0 NaN
我有两个火花DF,我需要加入。只选择df1中存在的df2中的值,不应该有重复的行。 例如: df1: df2: 我正在做以下工作: 但是我的输出有几个重复的行。 如果val从df1中删除,我试图实现一个类似except的操作。但是除了之外,
我尝试在做了一些转换和过滤后将很多CSV文件加入到一个数据帧中,当我对sn2数据帧使用append方法时,导出的CSV包含我想要的所有数据,但是当我对sn3数据帧使用append方法时,只有最后一个CSV的数据被导出,我错过了什么?
假设我有两个数据帧,具有不同级别的信息,如下所示: 我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。 预期产出:
我得到以下错误 关于代码 我试图将的列连接到的列。 对于这些打印语句 我得到以下输出: 你知道是什么问题吗?为什么索引会成为一个问题?索引应该是相同的,因为我关注的是列,而不是行。列值似乎完全不同。 谢谢
如何使用panda连接2个CSV文件,使生成的CSV文件没有行索引?见下例: 文件1。csv 文件2。csv desired_file.csv 不是这个: 我的代码: 谢谢:)
问题内容: 我正在使用两个MySQL数据库。我想将DB1中的表与SQLAlchemy中DB2中的表连接起来。 我在sqlalchemy中创建数据访问层时正在使用automap_base,如下所示… 我的表类就像 我正在这样加入 我收到这样的错误: 我们在数据库db1中创建了表t1,在数据库db2中创建了表t2。 是否可以在sqlalchemy ORM中的两个数据库表之间进行联接?如何实现呢? 问题