将列从一个DataFrame复制到另一个DataFrame会产生NaN值吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将列从一个DataFrame复制到另一个DataFrame会产生NaN值吗?相关的知识,希望对你有一定的参考价值。

这个question被问过这么多次,它似乎适用于其他人,但是,当我从不同的DataFrame复制一个列时,我得到NaN值(df1df2是相同的长度)。

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

为什么会这样?还有另一个讨论postmerge,但我只需要复制它。任何帮助,将不胜感激。

答案

您的DataFrame的索引不一样,因此请先重置它们。

df1, df2 = [d.reset_index(drop=True) for d in (df1, df2)]

或者,如果它们的长度相同,则将一个索引指定给另一个:

df1.index = df2.index

现在,组合DataFrames,

# pd.concat([df2, df1[['date', 'hour']]], axis=1)
df2.join(df1[['date', 'hour']])

        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'].values
df2['hour'] = df1['hour'].values

以上是关于将列从一个DataFrame复制到另一个DataFrame会产生NaN值吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将列从一个 CSV 文件复制到另一个 CSV 文件?

在 sqlite3 中:将列从一个表复制到另一个表

将列从一个 datagridview 和结果添加到另一个 datagridview

Pandas 基于连接将列从一个数据帧添加到另一个数据帧

将列从一个表添加到另一个表的正确 MySQL 方法

基于唯一对组合将列从一个文件合并到另一个文件