Python concat两个数据帧,带关节轴
我以为这会很简单,但我不能让它工作。。。 我有两个数据帧:Python concat两个数据帧,带关节轴,python,pandas,Python,Pandas,我以为这会很简单,但我不能让它工作。。。 我有两个数据帧: 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 我只希望
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
您可以使用
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
>>>
您使用的
pd.concat
应该会产生预期的输出,并且在我的测试中有效。尝试以下操作以确保两个数据帧的索引对齐,然后重新运行concat
行,或使用join
:
fpeaklocs.reset_index(drop=True, inplace=True)
fpeakvals.reset_index(drop=True, inplace=True)
在此之后,以下任一项都应起作用:
pd.concat([fpeaklocs, fpeakvals], axis=1)
或
如果仍然不起作用,请尝试以下方法:
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)
这两个数据段的索引结果如下:
fpeaklocs.index
Out[250]: Index(['0', '1', '2', '3', '4'], dtype='object')
fpeakvals.index
Out[251]: RangeIndex(start=0, stop=5, step=1)
所以问题来自fpeaklocs,在重置索引()之后:
谢谢大家! 您想要的是“join”而不是concat.fpeaklocs.join(fpeaklocs)显示我的上一个代码的0到4行…列“A”仍然为空。它显示空的数据帧列:[Hz,A]索引:[]您是如何创建数据帧对象的
fpeaklocs
和fpeaklocs
。这可能会给我们一些提示,说明为什么它不适合您我不确定我是否完全理解生成fpeaklocs和fpeakvals的代码。。。我刚刚更新了更多的观察结果。。。。如果有机会建议一些方法来检查这两个数据帧?我不明白为什么dataframe可以执行不同的操作。哇,reset_index()使它工作。非常感谢。如果你能告诉我什么时候有必要的话。似乎不清楚为什么某些(或我的)数据帧需要重置_index()@Simon,我唯一的猜测是一个或两个数据帧的索引不包含整数,不管它们显示为什么。为了解决这个问题,您可以比较fpeaklocs.index
和fpeaklocs.index
的输出。可能其中一个索引包含浮点数或字符串。您的猜测是正确的。fpeaklocs的索引是字符串。我已经根据您的回复为其他人更新了更多发现。我应该更新函数以生成这两个数据帧。非常感谢。@Simon,很高兴听到这个消息!
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(drop=True, inplace=True)
fpeaklocs.index
Out[254]: RangeIndex(start=0, stop=5, step=1)