我有两个具有相同行数的DataFrame-df1
,如下所示:
date hour var1
a 2017-05-01 00:00:00 456585
b 2017-05-01 01:00:00 899875
c 2017-05-01 02:00:00 569566
d 2017-05-01 03:00:00 458756
e 2017-05-01 04:00:00 231458
f 2017-05-01 05:00:00 986545
字符串
和df2
,如下所示:
MyVar1 MyVar2
0 6169.719338 3688.045368
1 5861.148007 3152.238704
2 5797.053347 2700.469871
3 5779.102340 2730.471948
4 6708.219647 3181.298291
5 8550.380343 3793.580394
型
我想把df1
的date
和hour
列中的数据合并到df2
中,得到如下结果:
MyVar1 MyVar2 date hour
0 6169.719338 3688.045368 2017-05-01 00:00:00
1 5861.148007 3152.238704 2017-05-01 01:00:00
2 5797.053347 2700.469871 2017-05-01 02:00:00
3 5779.102340 2730.471948 2017-05-01 03:00:00
4 6708.219647 3181.298291 2017-05-01 04:00:00
5 8550.380343 3793.580394 2017-05-01 05:00:00
型
我试着简单地分配列,如下所示:
df2['date'] = df1['date']
df2['hour'] = df1['hour']
型
但是我得到的结果是date
和hour
列中的NaN值:
MyVar1 MyVar2 date hour
0 6169.719338 3688.045368 NaN NaN
1 5861.148007 3152.238704 NaN NaN
2 5797.053347 2700.469871 NaN NaN
型
为什么会发生这种情况?如何简单地赋值,使df1
的第一行中的数据显示在df2
的第一行中,等等?
3条答案
按热度按时间cnwbcb6i1#
罪魁祸首是不可删除的索引
您的DataFrame的索引不同(相应地,每个列的索引也不同),因此当尝试将一个DataFrame的列分配给另一个DataFrame时,pandas会尝试对齐索引,如果无法对齐,则插入NaN。
考虑以下示例以理解这意味着什么:
当没有重叠时,pandas甚至不能匹配两个DataFrame之间的单个值以放入赋值结果中,因此输出是一个充满NaN的列。
如果您正在使用IPython notebook,则可以使用以下命令检查这是否确实是根本原因,
型
您可以使用以下任何解决方案来解决此问题。
解决方案一:分配底层NumPy数组(绕过pandas索引对齐)
只有当两个DataFrame的长度匹配(即具有相同的行数)时,此解决方案才有效。
型
要轻松分配多个列,请使用,
型
解决方案2:重置两个DataFrame的索引
当两个 Dataframe 有不同的长度时。如果你一开始就不想有不同的索引,或者你不特别关心保留索引,那么这可能是更好的选择。
型
如果你想保留现有的索引,但作为一个列,你可以使用
reset_index()
代替。siv3szwd2#
试试这个
字符串
djmepvbi3#
我知道我迟到了这个线程,但这种格式已经为我工作得很好。
字符串
你也可以在那个值集参数中对df1执行函数。希望这对你有帮助