dataframe按照pclass类型,利用pclass类别均值apply函数填补age缺失值
时间: 2023-07-06 19:27:34 浏览: 140
好的,针对您的问题,可以使用 Pandas 库的 `apply` 函数来完成。以下是示例代码:
```python
import pandas as pd
# 读取数据
df = pd.read_csv('your_data.csv')
# 定义函数,用于填补缺失值
def fill_na(row, pclass_means):
if pd.isnull(row['age']):
return pclass_means[row['pclass']]
else:
return row['age']
# 计算不同 pclass 的 age 均值
pclass_means = df.groupby('pclass')['age'].mean()
# 使用 apply 函数填补缺失值
df['age'] = df.apply(lambda row: fill_na(row, pclass_means), axis=1)
```
其中,`your_data.csv` 是您的数据文件名,需要根据实际情况进行修改。这段代码会计算不同 `pclass` 的 `age` 均值,并使用 `apply` 函数填补缺失值。
相关问题
dataframe按照pclass类型,利用pclass类别均值填补age缺失值
好的,针对您的问题,可以使用 Pandas 库来完成。以下是示例代码:
```python
import pandas as pd
# 读取数据
df = pd.read_csv('your_data.csv')
# 计算不同 pclass 的 age 均值
pclass_means = df.groupby('pclass')['age'].mean()
# 填补缺失值
for i, row in df.iterrows():
if pd.isnull(row['age']):
df.loc[i, 'age'] = pclass_means[row['pclass']]
```
其中,`your_data.csv` 是您的数据文件名,需要根据实际情况进行修改。这段代码会计算不同 `pclass` 的 `age` 均值,并使用均值填补缺失值。
(1) 使用 pandas 读入数据 titanic.csv,命名为 origin,并查看数据维度与前 10 行。 (2) 处理缺失值: (a) 查看哪些列存在缺失值。 (b) 发现原始数据中存在年龄为空值的记录,可能是无法识别乘客年龄的缘故,因此去除 年龄为空的记录。(满足 age 为空的一行数据全部丢弃)并再次查看哪些列存在缺失 值。保存上述数据清洗后的数据至“titanic2_cleaned.csv”文件中,随后的题目都在 “titanic2_cleaned.csv”上进行。 1 (3) 筛选列名为 pclass,sex,age,fare,who,adult_male 的列,构成模型数据,命名为 titanic_model。 (4) 使用 patsy.dmatrices() 函数,建立变量 fare 对变量 age 的线性回归,为该线性模型产生设 计矩阵;根据最小二乘法计算回归拟合系数。 (5) 使用 Pandas.get_dummies() 将分类变量 sex、who 转化为虚拟变量,利用 patsy 将数值列 pclass 转化为分类变量。 (6) 使用 statsmodels 包,基于 statsmodels.api(数组接入),利用最小二乘法建立 fare 对 pclass、 sex、age、who 的线性回归模型,(pclass、age 为数值型变量,sex、who 为虚变量),并添 加截距项,展示拟合系数。
好的,以下是针对你的问题的回答:
(1) 使用 pandas 读入数据 titanic.csv,命名为 origin,并查看数据维度与前 10 行。
```python
import pandas as pd
origin = pd.read_csv('titanic.csv')
print("数据维度为:", origin.shape)
print("前10行数据为:\n", origin.head(10))
```
(2) 处理缺失值:
(a) 查看哪些列存在缺失值。
```python
print(origin.isnull().sum())
```
(b) 发现原始数据中存在年龄为空值的记录,可能是无法识别乘客年龄的缘故,因此去除年龄为空的记录。(满足 age 为空的一行数据全部丢弃)并再次查看哪些列存在缺失值。保存上述数据清洗后的数据至“titanic2_cleaned.csv”文件中,随后的题目都在“titanic2_cleaned.csv”上进行。
```python
# 去除 age 为空的行
titanic2 = origin.dropna(subset=['age'])
# 再次查看哪些列存在缺失值
print(titanic2.isnull().sum())
# 保存数据到 titanic2_cleaned.csv 文件中
titanic2.to_csv('titanic2_cleaned.csv', index=False)
```
(3) 筛选列名为 pclass,sex,age,fare,who,adult_male 的列,构成模型数据,命名为 titanic_model。
```python
titanic_model = titanic2[['pclass', 'sex', 'age', 'fare', 'who', 'adult_male']]
```
(4) 使用 patsy.dmatrices() 函数,建立变量 fare 对变量 age 的线性回归,为该线性模型产生设计矩阵;根据最小二乘法计算回归拟合系数。
```python
import patsy
import numpy as np
# 构建设计矩阵
y, X = patsy.dmatrices('fare ~ age', data=titanic_model, return_type='dataframe')
# 根据最小二乘法计算回归拟合系数
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X, y)
print("回归系数为:", lr.coef_)
```
(5) 使用 Pandas.get_dummies() 将分类变量 sex、who 转化为虚拟变量,利用 patsy 将数值列 pclass 转化为分类变量。
```python
# 将 sex、who 转化为虚拟变量
titanic_model = pd.get_dummies(titanic_model, columns=['sex', 'who'])
# 将 pclass 转化为分类变量
titanic_model['pclass'] = titanic_model['pclass'].astype('category')
titanic_model = patsy.dmatrix('pclass + age + fare + sex_female + sex_male + who_child + who_man + who_woman', data=titanic_model, return_type='dataframe')
```
(6) 使用 statsmodels 包,基于 statsmodels.api(数组接入),利用最小二乘法建立 fare 对 pclass、sex、age、who 的线性回归模型,(pclass、age 为数值型变量,sex、who 为虚变量),并添加截距项,展示拟合系数。
```python
import statsmodels.api as sm
# 为矩阵添加截距项
X = sm.add_constant(titanic_model)
# 建立线性回归模型
model = sm.OLS(y, X).fit()
# 展示拟合系数
print(model.params)
```
阅读全文