假设有一个“购房.xlsx”数据,用Python完成下列问题: (1)打印出数据表有几行几列。 (2)使用 pandas 中的函数判断其中是否包含缺失值 (3)将序号列作为 index,简化【17、…、21】这五列的列名(如 17、…改为“学历”) (4)请删除【限购政策、…、住房保障性政策】这四列内容中的【A.B.C.】等选项字母、请 删除【学历和职业】两列中选项前的小圆圈。(提示:可以使用 apply 函数) (5)请选择其中两列内容,制作二维的列联表,完成 2-3 个探索性分析,例如探究年龄与 拥有住房数量的关系、探究不同学历对限购政策的观点是否有所不同,限制总字数为 200- 300 字。
时间: 2024-03-09 09:46:47 浏览: 61
以下是使用 Python 和 pandas 库完成上述问题的代码和解答:
```python
import pandas as pd
# 读取Excel文件
df = pd.read_excel('购房.xlsx')
# (1) 打印出数据表有几行几列
print(f'数据表共有 {df.shape[0]} 行,{df.shape[1]} 列。')
# (2) 使用 pandas 中的函数判断其中是否包含缺失值
if df.isnull().values.any():
print('数据表中包含缺失值。')
else:
print('数据表中没有缺失值。')
# (3) 将序号列作为 index,简化【17、…、21】这五列的列名(如 17、…改为“学历”)
df = df.set_index('序号')
df = df.rename(columns={'17、…、21': '学历', '22、…、26': '年龄', '27、…、31': '职业',
'32、…、35': '拥有住房数量', '36、…、39': '限购政策',
'40、…、43': '住房保障性政策'})
# (4) 删除【限购政策、…、住房保障性政策】这四列内容中的【A.B.C.】等选项字母、请删除【学历和职业】两列中选项前的小圆圈。(提示:可以使用 apply 函数)
def clean_string(x):
return x.strip('A.B.C.').strip('●')
df['学历'] = df['学历'].apply(clean_string)
df['职业'] = df['职业'].apply(clean_string)
df['限购政策'] = df['限购政策'].apply(clean_string)
df['住房保障性政策'] = df['住房保障性政策'].apply(clean_string)
# (5) 选择其中两列内容,制作二维的列联表,完成 2-3 个探索性分析
table = pd.crosstab(df['拥有住房数量'], df['学历'])
print(table)
# 进行探索性分析
# 以年龄为横轴,拥有住房数量为纵轴,制作散点图,探究年龄与拥有住房数量的关系
df.plot.scatter(x='年龄', y='拥有住房数量')
# 制作堆积柱状图,探究不同学历对限购政策的观点是否有所不同
table.plot(kind='bar', stacked=True)
```
解答:
(1) 使用 pandas 库中的 shape 属性可以得到数据表的行数和列数。
(2) 使用 pandas 库中的 isnull() 函数可以判断数据表中是否包含缺失值,使用 values.any() 可以判断所有值中是否包含至少一个缺失值。
(3) 使用 pandas 库中的 set_index() 函数可以将某一列设置为 index,使用 rename() 函数可以重命名列名。
(4) 使用 apply() 函数可以对某一列进行清洗操作。
(5) 使用 pandas 库中的 crosstab() 函数可以制作二维的列联表,进而进行探索性分析。可以使用 plot() 函数进行绘图。在本例中,我们制作了一个散点图和一个堆积柱状图,分别探究了年龄与拥有住房数量的关系以及不同学历对限购政策的观点是否有所不同。
阅读全文