#数据的导入
import pandas as pd
import numpy as np
#导入EXCEL表格数据;na_values=''指定了将Excel文件中的空单元格转换为NaN
df_excel=pd.read_excel('C:/Users/galax/Desktop/MBA小行星数据/4000.xls',na_values=0)
#定义0为缺失值
see_data=df_excel
#统计每一列的缺失值个数
print(see_data.isnull().sum(axis=0))
结果发现Asterank一共4001颗小行星,就有3004颗没有利润值y,初步想法是直接删除3004个没有值的样本,剩下的缺失数据用KNN填补。
df = pd.DataFrame(see_data)
# #方法1:
# 删除 'Est. Profit ($)' 列中包含缺失值的行
df = df.dropna(subset=['Est. Profit ($)'])
df.to_excel('C:/Users/galax/Desktop/sub.xlsx', index=False)
4001个样本,删除缺失值后直接变成了997行
下一步就是对这997个样本进行脏数据整理:
- 处理>号
- 处理单位并转换billion,million,trillion
- 标准化归一化
#想要实现将Est.Profit列传入dataFrame-df,
#数据的导入
import pandas as pd
import numpy as np
#导入EXCEL表格数据;na_values=''指定了将Excel文件中的空单元格转换为NaN
df=pd.read_excel('C:/Users/galax/Desktop/sub.xls')
# 选择特定的列
df_selected = df['Profit']
# 显示加载后的DataFrame
#print(df_selected)
# 定义一个清洗和转换数据的函数
def clean_and_convert_value(s):
if isinstance(s, str):
# 移除大于符号
if '>' in s:
s = s.replace('>', '').strip()
# 分割数值和单位
if 'trillion' in s:
number, unit = s.split('trillion')
mult = 1e12 # 表示 trillion 单位的数值
elif 'billion' in s:
number, unit = s.split('billion')
mult = 1e9 # 表示 billion 单位的数值
elif 'million' in s:
number, unit = s.split('million')
mult = 1e6 # 表示 billion 单位的数值
else:
return s
# 转换为浮点数,并进行单位统一(统一转为million)
return float(number.strip()) * mult / 1e6
elif isinstance(s, float):
return s/1e6
# 应用这个函数到DataFrame的列
df['value_numeric'] =df['Profit'].apply(clean_and_convert_value)
print(df['value_numeric'])
df.to_excel('C:/Users/galax/Desktop/Profit_cleaned4.xlsx', index=False)
运行结果:
下一步是对derta_V列中的缺失值进行KNN插补