DataFrame对象是可变的,因此在使用Series.unique()时无法对它们进行哈希处理

时间:2018-11-25 04:32:59

标签: python python-3.x pandas data-processing

在泰坦尼克号数据框中使用Series.unique()时遇到问题。

虽然在原始df中使用Series.unique()不会产生任何错误,但是在基于特定列的串联火车和测试时,然后使用Series.unique()会给我带来错误。

根据我的尝试,这是由替换第5条语句中的空值引起的。如果我注释掉这一行,代码将正常工作而不会出现任何错误。为什么会这样呢?还可以解决吗?

<head>

可以从以下位置下载火车和测试文件:

https://www.kaggle.com/c/titanic/download/test.csv https://www.kaggle.com/c/titanic/download/train.csv

我当前正在使用Pandas版本0.23.4

1 个答案:

答案 0 :(得分:1)

给出:

cat_cols = ['Pclass', 'Sex', 'Embarked']
df_train = pd.read_csv('train.csv')
df_pred = pd.read_csv('test.csv')
df_join = pd.concat([df_train[cat_cols], df_pred[cat_cols]])

NaN值仅出现在Embarked列中,可以通过以下代码进行验证:

df_join.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1309 entries, 0 to 417
Data columns (total 3 columns):
Pclass      1309 non-null int64
Sex         1309 non-null object
Embarked    1307 non-null object
dtypes: int64(1), object(2)
memory usage: 80.9+ KB

因此,用NaN列值的模式替换Embarked

df_join.Embarked = df_join.Embarked.fillna(df_join.Embarked.mode()[0])
df_join.Embarked.value_counts().sum()
# 1309

并寻找唯一值:

df_join.Embarked.unique()
# array(['S', 'C', 'Q'], dtype=object)

提示:不是mode而是mode()[0]

希望我回答了您的查询,如果没有对您的查询做出评论。