2017-08-29 21:014dataframe
1. df[a][boolean] 前一个中括号代表 一列, 后一个代表 一个判断
2. df[['a','b']] 代表两列
2.1
df[boolean][a] 前一个代表条件,后一个代表一列
survived = train[train["Survived"] == 1]["Age"].dropna()
perished = train[train["Survived"] == 0]["Age"].dropna()
3. groupby ,
df['sex']['survived'].groupby('sex').mean( )
以性别分类, 男性的mean, 女性的mean
但是要运行 mean命令 必须为int 或者float
Try use df[Sex] .astype(int)
4.某一列的类别 再加一类(基于另一列)===本列类+外列类
def fun2(passengers):
a,b=passengers
return 'child' if a<14 else b
train['person']=train[['Age','Sex']].apply(fun2, axis=1)
先看第二块代码, 代表创建新一列, 列名叫person, 对 两列(年龄列,性别列)应用函数,AXIS=1 列
再看第一块代码, 函数双参数, if 第一个参数条件满足, 返回 CHILD
否则 返回 第二个参数
5. 空值的补充 某列的某条件下的list赋值随机list====条件列赋值随机列
age_avg = dataset['Age'].mean()
age_std = dataset['Age'].std() age_null_count = dataset['Age'].isnull().sum() age_null_random_list = np.random.randint(age_avg - age_std, age_avg + age_std, size=age_null_count) dataset['Age'][np.isnan(dataset['Age'])] = age_null_random_list
或者 dataset['Age'][dataset['Age'].isnull()]=age_null_random_list
看最后一行代码,第一个中括号代表列, 第二个代表判断, 判定成功的列表=随机生成的列表
6. 列分割
train['cut'] = pd.cut(train['Age'], 20) ~~~创建新的一列叫cut, 它把某列分割为20组
train[['cut','Survived']].groupby('cut').mean() ~~~groupby 函数
sns.factorplot('cut','Survived',data=train) ~~~画图
7. df index convert to colume
data3=train[['Neighborhood','SalePrice']].groupby('Neighborhood').mean
data4=data3.reset_index()
sns.barplot('Neighborhood','SalePrice',data=data4)
8.df [ pd.not_null( ) ]
select all not_null samples base on one colume
train=train[pd.notnull(train['shot_made_flag'])]
8.
for feature in "Age","Fare":
df[feature].fillna (train[feature].mean(),inplace=True)
9. 特征选择
例如泰坦尼克中 我们不能选Embarked
为什么 因为这个要素是派生的 是重复的
存活率最高的那个 embark 是基于 此港口 女性多 买头等舱的多
10. add the random thing
average_age_titanic = titanic_df["Age"].mean()
std_age_titanic = titanic_df["Age"].std()
count_nan_age_titanic = titanic_df["Age"].isnull().sum()
rand_1 = np.random.randint(average_age_titanic - std_age_titanic, average_age_titanic + std_age_titanic, size = count_nan_age_titanic)
titanic_df["Age"][np.isnan(titanic_df["Age"])] = rand_1
titanic_df['Age'] = titanic_df['Age'].astype(int)
11.test_df["Fare"].fillna(test_df["Fare"].median(), inplace=True)
12.27th sep try
In [13]
in [30]
in[68]