Python 为什么将虚拟变量从一个数据帧传输到另一个数据帧会创建NAN值
我有一个分类变量,有5195个不同的值,没有任何缺失值,当我使用pd.get_dummies创建虚拟变量时,它会创建没有任何缺失值或NAN值的虚拟变量 df有5列和700000行Python 为什么将虚拟变量从一个数据帧传输到另一个数据帧会创建NAN值,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个分类变量,有5195个不同的值,没有任何缺失值,当我使用pd.get_dummies创建虚拟变量时,它会创建没有任何缺失值或NAN值的虚拟变量 df有5列和700000行 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 输入 输出: f2 f f1 f0 0 0 0 0 0 1 1 0 0 0 现在,我将虚拟_变量传输
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
输入
输出:
f2 f f1 f0
0 0 0 0 0
1 1 0 0 0
现在,我将虚拟_变量传输到原始数据帧
输入
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的行数和列数与temp数据帧中的列数相同
这里的问题是什么,如何解决
谢谢
问题在于如何连接两个数据帧,您应该这样做
pd.concat([df,temp], axis = 1)
其他数据集的示例,
在下面的例子中,我模拟了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
这两种方法都描述了上述作品,然而,它显示了一些奇怪的原因。但是,仔细检查发现,所有列都包含实际值 您将需要显示一些数据,包括索引,以便人们看到这里发生了什么。您的索引在每个帧上是什么样子的?两个整数?选择
DictVectorizer
!与上面描述的问题相同。另外,我们可以使用上面的方法连接两个数据帧。这对我来说很好初始注释中缺少了[]
。当我添加的列很少时,这两种方法都有效。当我添加7000行时,这两种方法都有相同的问题。即使我使用我尝试过的100k行,7000行也不会有问题。但很多傻瓜可能会让我们失望。
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