我在Pandas做一些工作,并在使用pd.concat
时出现奇怪的行为。具体来说,我有一个DataFrame,df
,我对zipcode
列进行单热编码。这就是我正在做的事情:
zip_encoded = label_binarizer.transform(df["zipcode"])
zip_encoded = pd.DataFrame(zip_encoded, columns=label_binarizer.classes_)
df = df.drop("zipcode", axis=1)
print("df shape:", df.shape)
print("zip encoded shape:", zip_encoded.shape)
result = pd.concat([df, zip_encoded], axis=1)
print("result shape", result.shape)
return label_binarizer, result
这给出了以下输出:
df shape: (13999, 13)
zip encoded shape: (13999, 10)
result shape (14000, 23)
所以我只想尝试沿着列连接,我希望结果形状为(13999, 23)
,但我看到的形状为(14000, 23)
。
我使用我test_df
上适合的LabelBinarizer
对我的df
做同样的事情。当我这样做时,我会得到更奇怪的东西:
df shape: (1000, 13)
zip encoded shape: (1000, 10)
result shape (2000, 23)
当我检查新的test_df
时,所有非邮政编码列都填充了NaN ...
知道我做错了什么吗?
谢谢!
答案 0 :(得分:1)
创建index
zip_encoded
zip_encoded = label_binarizer.transform(df["zipcode"])
zip_encoded = pd.DataFrame(zip_encoded, columns=label_binarizer.classes_,index=df.index)
然后做concat
df = df.drop("zipcode", axis=1)
result = pd.concat([df, zip_encoded], axis=1)
示例,你df索引可能不是从0到len(df)
,当你创建df而没有设置index
时,默认是从0到len(df)
范围,这就是为什么在{ {1}},形状不同
concat