Pandas:具有意外行为的Concat DataFrames

时间:2018-05-04 01:43:03

标签: python pandas

我在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 ...

知道我做错了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

创建index

时,您可能需要从df添加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