Pandas: Concat DataFrames с неожиданным поведением - PullRequest
0 голосов
/ 04 мая 2018

Я работаю в 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 голосов
/ 04 мая 2018

При создании zip_encoded

может потребоваться добавить index из df
zip_encoded = label_binarizer.transform(df["zipcode"])        
zip_encoded = pd.DataFrame(zip_encoded, columns=label_binarizer.classes_,index=df.index)

Затем делаем конкат

df = df.drop("zipcode", axis=1)
result = pd.concat([df, zip_encoded], axis=1)

Например, у вас индекс df не может быть от 0 до len(df), когда вы создаете df без установки index, по умолчанию это диапазон от 0 до len(df), поэтому после concat форма отличается

df1=pd.DataFrame({'A':[1,2]},index=[0,1])
df2=pd.DataFrame({'A':[1,2]},index=[1,2])
print(pd.concat([df1,df2],axis=1))
df2=pd.DataFrame({'A':[1,2]},index=df1.index)
print(pd.concat([df1,df2],axis=1))
     A    A
0  1.0  NaN
1  2.0  1.0
2  NaN  2.0
   A  A
0  1  1
1  2  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...