以“超市营业额2.xlsx”为基础,分别完成以下打印操作。 (1)创建交叉表,要求索引为时段,列名为日期,值为交易总额,并且显示边界及边界上的数据,打印前五列数据; (2)使用重采样技术,输出每9天营业额的中位数; (3)使用交叉表得到不同员工在不同柜台的交易总额,并求出标准差; (4)找出日期中天数包含3的交易数据的前15行; 删除缺失值和重复值,把异常值(交易额大于3000或者小于200)替换为交易额的均值,使用交叉表得到每人在各时段交易总额,绘制柱状图,图中字体统一使用黑体。
时间: 2024-02-23 21:58:05 浏览: 67
超市营业额2.xlsx
好的,以下是对你的问题的回答:
(1)创建交叉表,要求索引为时段,列名为日期,值为交易总额,并且显示边界及边界上的数据,打印前五列数据。
我们可以使用 Pandas 库中的 pivot_table() 函数来创建交叉表。具体代码如下:
``` python
import pandas as pd
# 读取数据
df = pd.read_excel('超市营业额2.xlsx')
# 创建交叉表
table = pd.pivot_table(df, index='时段', columns='日期', values='交易总额', margins=True, margins_name='总计')
# 显示边界及边界上的数据
print(table.iloc[:6, :5])
```
上述代码中,我们首先使用 Pandas 库中的 read_excel() 函数读取“超市营业额2.xlsx”文件中的数据。然后,我们使用 pivot_table() 函数创建交叉表,其中 index 参数指定索引为“时段”,columns 参数指定列名为“日期”,values 参数指定值为“交易总额”,margins=True 参数指定显示边界,margins_name='总计' 参数指定边界的名称为“总计”。
最后,我们使用 iloc[] 函数打印交叉表的前 6 行和前 5 列。
(2)使用重采样技术,输出每9天营业额的中位数。
我们可以使用 Pandas 库中的 resample() 函数对数据进行重采样,然后使用 median() 函数计算每个重采样区间内的中位数。具体代码如下:
``` python
import pandas as pd
# 读取数据
df = pd.read_excel('超市营业额2.xlsx', index_col='日期', parse_dates=True)
# 按照9天重采样,并计算中位数
resampled = df.resample('9D').median()
# 输出结果
print(resampled)
```
上述代码中,我们首先使用 Pandas 库中的 read_excel() 函数读取“超市营业额2.xlsx”文件中的数据,并将“日期”列设置为索引,并将其解析为日期格式。然后,我们使用 resample() 函数按照 9 天重采样数据,并使用 median() 函数计算每个重采样区间内的中位数。最后,我们使用 print() 函数输出结果。
(3)使用交叉表得到不同员工在不同柜台的交易总额,并求出标准差。
我们可以使用 Pandas 库中的 pivot_table() 函数创建交叉表,并使用 std() 函数计算标准差。具体代码如下:
``` python
import pandas as pd
# 读取数据
df = pd.read_excel('超市营业额2.xlsx')
# 创建交叉表
table = pd.pivot_table(df, index='柜台', columns='员工', values='交易总额')
# 计算标准差
std = table.std().round(2)
# 输出结果
print(table)
print('标准差:\n', std)
```
上述代码中,我们首先使用 Pandas 库中的 read_excel() 函数读取“超市营业额2.xlsx”文件中的数据。然后,我们使用 pivot_table() 函数创建交叉表,其中 index 参数指定索引为“柜台”,columns 参数指定列名为“员工”,values 参数指定值为“交易总额”。
最后,我们使用 std() 函数计算标准差,并使用 round() 方法保留两位小数,最后使用 print() 函数输出结果。
(4)找出日期中天数包含3的交易数据的前15行。
我们可以使用 Pandas 库中的 str.contains() 函数和 head() 方法找出日期中天数包含 3 的交易数据的前 15 行。具体代码如下:
``` python
import pandas as pd
# 读取数据
df = pd.read_excel('超市营业额2.xlsx')
# 找出日期中天数包含3的交易数据的前15行
result = df[df['日期'].astype(str).str.contains('3')].head(15)
# 输出结果
print(result)
```
上述代码中,我们首先使用 Pandas 库中的 read_excel() 函数读取“超市营业额2.xlsx”文件中的数据。然后,我们使用 str.contains() 函数找出日期中天数包含 3 的交易数据,并使用 head() 方法取前 15 行数据。
最后,我们使用 print() 函数输出结果。
(5)删除缺失值和重复值,把异常值(交易额大于 3000 或者小于 200)替换为交易额的均值,使用交叉表得到每人在各时段交易总额,绘制柱状图,图中字体统一使用黑体。
我们可以使用 Pandas 库中的 dropna() 函数和 drop_duplicates() 函数删除缺失值和重复值,使用 loc[] 函数将异常值替换为交易额的均值,然后使用 pivot_table() 函数创建交叉表,并使用 plot() 函数绘制柱状图。具体代码如下:
``` python
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei'] # 设置字体为黑体
# 读取数据
df = pd.read_excel('超市营业额2.xlsx')
# 删除缺失值和重复值
df.dropna(inplace=True)
df.drop_duplicates(inplace=True)
# 将异常值替换为均值
mean = df['交易总额'].mean()
df.loc[df['交易总额'] > 3000, '交易总额'] = mean
df.loc[df['交易总额'] < 200, '交易总额'] = mean
# 创建交叉表
table = pd.pivot_table(df, index='员工', columns='时段', values='交易总额')
# 绘制柱状图
table.plot(kind='bar')
plt.title('每人在各时段交易总额') # 设置标题
plt.xlabel('员工') # 设置 x 轴标签
plt.ylabel('交易总额') # 设置 y 轴标签
plt.show()
```
上述代码中,我们首先使用 Pandas 库中的 read_excel() 函数读取“超市营业额2.xlsx”文件中的数据。然后,我们使用 dropna() 函数和 drop_duplicates() 函数删除缺失值和重复值。
接下来,我们使用 loc[] 函数将交易额大于 3000 或者小于 200 的异常值替换为交易额的均值。
然后,我们使用 pivot_table() 函数创建交叉表,并使用 plot() 函数绘制柱状图。在绘制柱状图时,我们使用 plt.rcParams['font.family'] = ['SimHei'] 语句将字体设置为黑体,并使用 plt.title()、plt.xlabel() 和 plt.ylabel() 函数设置标题、x 轴标签和 y 轴标签。最后,我们使用 plt.show() 函数显示图形。
阅读全文