DataFrame 对象是可变的,因此在使用 Series.unique() 时不能对其进行哈希处理
DataFrame objects are mutable thus they cannot be hashed while using Series.unique()
我在 titanic dataframe 中使用 Series.unique() 时遇到问题。
虽然在原始 df 中使用 Series.unique() 不会出现错误,但在基于特定列连接训练和测试时,然后使用 Series.unique() 会出现错误。
根据我的尝试,这是由替换第 5 条语句中的空值引起的。如果我注释掉该行,则代码可以正常工作而不会出现任何错误。为什么会这样?还有什么解决办法吗?
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]])
df_join = df_join.fillna(df_join.mode, axis=0)
df_join.Embarked.unique()
训练和测试文件可以从以下网址下载:
https://www.kaggle.com/c/titanic/download/test.csv
https://www.kaggle.com/c/titanic/download/train.csv
我目前正在使用 Pandas 版本 0.23.4
给定:
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]
希望我回答了你的问题,如果没有请评论你的问题。
我在 titanic dataframe 中使用 Series.unique() 时遇到问题。
虽然在原始 df 中使用 Series.unique() 不会出现错误,但在基于特定列连接训练和测试时,然后使用 Series.unique() 会出现错误。
根据我的尝试,这是由替换第 5 条语句中的空值引起的。如果我注释掉该行,则代码可以正常工作而不会出现任何错误。为什么会这样?还有什么解决办法吗?
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]])
df_join = df_join.fillna(df_join.mode, axis=0)
df_join.Embarked.unique()
训练和测试文件可以从以下网址下载:
https://www.kaggle.com/c/titanic/download/test.csv https://www.kaggle.com/c/titanic/download/train.csv
我目前正在使用 Pandas 版本 0.23.4
给定:
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]
希望我回答了你的问题,如果没有请评论你的问题。