第一步:如何进行读取Excel文件里面,把非索引列的所有数据清洗去除0值、空值、和偏离比较大的值?先进行数据清洗对比:
import pandas as pd
# 1. 读取Excel文件
file_path = "C:\Users\Username\Documents\file.xlsx" # 替换成你的读取指定文件夹下文件,Windows电脑格式
file_path = "/Users/Username/Documents/file.xlsx " # 替换成你的读取指定文件夹下文件,Mac电脑和Unix/Linux格式,以上两段代码二选一
sheet_name = 'Sheet1'
df = pd.read_excel(file_path, sheet_name=sheet_name)
# 2. 数据清洗,对除第一列以外的每一列进行独立数据清洗
cleaned_data = {}
for col in df.columns[1:]:
original_data = df[col].copy() # 复制原始数据以展示清洗前后的对比
# 检查列数据类型是否为数字
if pd.api.types.is_numeric_dtype(df[col]):
# 去除负值、0值和空值
df[col] = df[col][df[col] > 0]
cleaned_data[col] = {
'Original Data': original_data,
'Cleaned Data': df[col]
}
# 3. 展示每列的清洗前和清洗后数据
for col, data in cleaned_data.items():
print(f"列名: {col}")
print(f"清洗前数据:\n{data['Original Data']}\n")
print(f"清洗后数据:\n{data['Cleaned Data']}\n")
第一步:对非索引列的所有列进行单独数据清洗,并进行描述性统计,输出统计结果:
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings ("ignore")
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文显示异常
# 去掉警告提示
warnings.filterwarnings("ignore")
# 1. 读取Excel文件
file_path = '/Users/Username/Documents/file.xlsx'
sheet_name = 'Sheet1'
df = pd.read_excel(file_path, sheet_name=sheet_name)
# 2. 数据清洗,对除第一列以外的每一列进行独立数据清洗
for col in df.columns[1:]:
# 去除0值
df = df[df[col] > 0]
# 去除空值
df = df.dropna()
# 去除负值
df = df[df[col] >= 0]
# 使用箱线图去除偏离很大的数值
def remove_outliers(column):
Q1 = column.quantile(0.25)
Q3 = column.quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
return column[(column >= lower_bound) & (column <= upper_bound)]
df[col] = remove_outliers(df[col])
# 使用科学计算去除偏离特别大的数值(根据需要自行实现)
# 3. 描述性统计并保留两位小数
statistics = df.describe().round(2)
# 4. 输出统计信息
print(statistics)
# 5. 如果需要,将统计信息保存到一个新的Excel文件中
statistics.to_excel('/Users/Username/Documents/描述性统计结果.xlsx) #注意这段代码MAC电脑和Windows电脑的区别
# 6. 绘制箱线图,旋转横坐标文字
plt.figure(figsize=(12, 6))
boxplot = df.boxplot(rot=90) # 旋转横坐标文字为垂直方向
plt.title('箱线图')
plt.xlabel('列名')
plt.ylabel('值')
plt.show()