为什么将虚拟变量从一个数据帧传输到另一个数据帧会创建NAN值

时间:2015-10-29 01:01:02

标签: python python-2.7 pandas

我有一个带有5195个不同值的分类变量,没有任何缺失值,当我使用pd.get_dummies创建虚拟变量时,它创建虚拟变量而没有任何缺失值或NAN值

df有5列和700,000行

df.head()

输出

     V  W  U  S  F  d
0    5  4  6 -1  1  0
1    7  4  6  1  8  1
2    7  4  7  1  4  2

输入

temp = pd.get_dummies(df["das"], prefix= "fine", sparse = True)
temp.head()

输出:

  f2 f f1 f0
0 0  0 0  0
1 1  0 0  0

现在,我正在将dummy_variable转移到原始数据框

输入

df[temp.columns] = temp

df.head()

但是,我在新列中看到了所有NA值

输出:

     V  W  U  S  F  d f2 f  f1 f0
0    5  4  6 -1  1  0 NA NA NA NA
1    7  4  6  1  8  1 NA NA NA NA
2    7  4  7  1  4  2 NA NA NA NA

此后,df具有相同数量的行和列,作为临时数据帧中的列数。

这里有什么问题,以及如何解决?

由于

This image show NA values after concatenating two data frames

2 个答案:

答案 0 :(得分:0)

问题在于你加入两个数据框的方式,你应该做这样的事情,

pd.concat([df,temp], axis = 1)

其他数据集的示例, 在下面的例子中,我dummied Store并加入了原始df。

df
   Store  DayOfWeek  Open  Promo  StateHoliday  SchoolHoliday
1      3          4     1      1             0              0
2      7          4     1      1             0              0
3      8          4     1      1             0              0

dfx = df.drop('Store',axis = 1)

dfx
   DayOfWeek  Open  Promo  StateHoliday  SchoolHoliday
1          4     1      1             0              0
2          4     1      1             0              0
3          4     1      1             0              0

temp = pd.get_dummies(df["Store"], prefix='ST', sparse = True)

temp
   ST_3  ST_7  ST_8
1     1     0     0
2     0     1     0
3     0     0     1

pd.concat([dfx,temp],axis=1)
   DayOfWeek  Open  Promo  StateHoliday  SchoolHoliday  ST_3  ST_7  ST_8
1          4     1      1             0              0     1     0     0
2          4     1      1             0              0     0     1     0
3          4     1      1             0              0     0     0     1

答案 1 :(得分:0)

上述两种方法都有效,但是,它显示了一些奇怪的原因。然而,仔细检查发现所有列都包含实际值。