用关节轴连接两个数据帧

时间:2018-06-16 17:19:56

标签: python pandas

我觉得这很简单,但我不能让它发挥作用...... 我有2个数据帧:

    fpeaklocs
    Out[203]: 
       Hz
    0   6
    1  15
    2  21
    3  28
    4  11

    fpeakvals
    Out[204]: 
              A
    0 -0.000426
    1  0.000362
    2  0.000420
    3  0.000377
    4  0.000420

我只想要它:

     Hz         A
0   6.0 -0.000426
1  15.0  0.000362
2  21.0  0.000420
3  28.0  0.000377
4  11.0  0.000420

但是,当我尝试以下内容时,它给了我这个:

pd.concat([fpeaklocs, fpeakvals], axis=1)
    Out[201]: 
     Hz         A
    0   6.0       NaN
    1  15.0       NaN
    2  21.0       NaN
    3  28.0       NaN
    4  11.0       NaN
    0   NaN -0.000426
    1   NaN  0.000362
    2   NaN  0.000420
    3   NaN  0.000377
    4   NaN  0.000420

知道如何实现我的目标吗?

还有更多观察结果:

pd.DataFrame({'Hz':fpeaklocs, 'A':fpeakvals}, index=fpeakvals.index)
ValueError: Shape of passed values is (2, 1), indices imply (2, 5)

fpeaklocs.join(fpeakvals)
Out[246]: 
   Hz   A
0   6 NaN
1  15 NaN
2  21 NaN
3  28 NaN
4  11 NaN

2 个答案:

答案 0 :(得分:0)

您可以使用pd.merge

>>> import pandas as pd
>>> fpeakvals = pd.DataFrame.from_dict({'A': [-0.000426, 0.000362, 0.000420, 0.000377, 0.000420]})
>>> fpeaklocs = pd.DataFrame.from_dict({'Hz': [6, 15, 21, 28, 11]})
>>> 
>>> pd.merge(fpeaklocs, fpeakvals, left_index=True, right_index=True)
   Hz         A
0   6 -0.000426
1  15  0.000362
2  21  0.000420
3  28  0.000377
4  11  0.000420
>>> 

答案 1 :(得分:0)

您对pd.concat的使用应该会产生您的预期输出,并且它可以在我的测试中使用。请尝试以下操作以确保两个DataFrame的索引排成一行,然后重新运行concat行,或使用join

fpeaklocs.reset_index(drop=True, inplace=True)
fpeakvals.reset_index(drop=True, inplace=True)

之后,以下任何一种都应该起作用:

pd.concat([fpeaklocs, fpeakvals], axis=1)

fpeaklocs.join(fpeakvals)

如果仍然不起作用,请尝试:

pd.DataFrame({'Hz':fpeaklocs.values.flatten(), 'A':fpeakvals.values.flatten()})

感谢彼得的建议,合并终于有效了:

fpeaklocs.reset_index(drop=True, inplace=True)
fpeakvals.reset_index(drop=True, inplace=True)
pd.concat([fpeaklocs, fpeakvals], axis=1)

这两个datadrame的.index结果是这样的:

fpeaklocs.index
Out[250]: Index(['0', '1', '2', '3', '4'], dtype='object')

fpeakvals.index
Out[251]: RangeIndex(start=0, stop=5, step=1)

所以问题来自fpeaklocs,并且在reset_index()之后:

fpeaklocs.reset_index(drop=True, inplace=True)

fpeaklocs.index
Out[254]: RangeIndex(start=0, stop=5, step=1)

谢谢大家!