这个question已经被问了很多次,似乎对其他人也有用,但是,当我从不同的数据帧复制列时(df1
和df2
的长度相同),我得到了NaN
的值。
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
我需要这样在我的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']
type(df1)
>> pandas.core.frame.DataFrame
type(df2)
>> pandas.core.frame.DataFrame
我得到以下信息
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
为什么会这样?还有一个post讨论了merge
,但我只需要复制它。任何帮助都将不胜感激。
罪魁祸首是不可对齐的索引
数据帧的索引不同(相应地,每列的索引也不同),因此当尝试将一个数据帧的列分配给另一个数据帧时,熊猫将尝试对齐索引,如果不对齐,则插入NaN。
请考虑以下示例以了解这意味着什么:
当没有重叠时,pandas甚至无法匹配要放入赋值结果的两个数据帧之间的单个值,因此输出是一个充满nan的列。
如果你在做一个IPython笔记本,你可以用
您可以使用以下任何解决方案来解决此问题。
解决方案1:重置两个数据帧的索引
如果一开始并不打算使用不同的索引,或者不特别关心如何保留索引,那么您可能更喜欢使用此选项。
如果希望保留现有索引,但作为列,则可以使用
reset_index()
。解决方案2:分配NumPy数组(绕过索引对齐)
只有当两个数据帧的长度匹配时,此解决方案才有效。
若要轻松分配多个列,请使用
试试这个?
相关问题 更多 >
编程相关推荐