头歌机器学习---Pandas数值统计 Pandas数据清洗
第1关 Pandas数值统计
因为series和dataframe是两个不同的对象,所以它们有自己独特的方法。接下来让我们看一个series方法的例子—Series.value_counts()方法。此方法按顺序显示列中的每个非空值及其计数。
首先,我们将从f500的dataframe中选择一个列:
sectors = f500["sector"]print(type(sectors))
输出结果:
class 'pandas.core.series.Series'
接下来,我们将把Series.value_counts()中的“Series”替换为sectors,如下所示:
sectors_value_counts = sectors.value_counts()print(sectors_value_counts)
输出结果:
Financials 118Energy 80Technology 44Motor Vehicles & Parts 34Wholesalers 28Health Care 27Food & Drug Stores 20Transportation 19Telecommunications 18Retailing 17Food, Beverages & Tobacco 16Materials 16Industrials 15Aerospace & Defense 14Engineering & Construction 13Chemicals 7Media 3Hotels, Restaurants & Leisure 3Business Services 3Household Products 3Apparel 2Name: sector, dtype: int64
我们可以看到列中每个非空值及其计数。
让我们看看当我们尝试对dataframe使用Series.value_counts()方法时会发生什么。首先,我们将选择sector和industry列来创建一个名为sectors_industries的dataframe:
sectors_industries = f500[["sector", "industry"]]
print(type(sectors_industries))
输出结果:
< class 'pandas.core.frame.DataFrame' >
然后,我们将尝试使用value_counts()方法:
si_value_counts = sectors_industries.value_counts()
print(si_value_counts)
因为value_counts()只是series的方法,所以我们得到以下错误: AttributeError: 'DataFrame' object has no attribute 'value_counts'
最终答案如下:
import pandas as pd
f500 = pd.read_csv('f500.csv',index_col=0)
f500.index.name = None
f500_sel = f500.iloc[[0,1,2,3,4,8]]
# 请在此添加代码
#********** Begin **********#
countries=f500_sel["country"]
country_counts=countries.value_counts()
print(countries)
print(country_counts)
#********** End **********#
第2关 Pandas数据清洗
缺失值处理:
1、检查缺失值
Pandas提供了isnull()和notnull()两个函数来检测数据中的NaN值。Series和DataFrame对象都可以使用。
2、处理缺失值
Pandas中可以通过fillna()函数来用非空数据填充NA值,如果想排除缺少的值,可以使用dropna()函数。删除缺失值时,可以传入axis参数,axis=0时则整行被删除,反之则整列被删除。默认值为0。
重复值处理:
检查重复值
Pandas中的duplicated()返回bool的Series序列表示该行是不是重复值。
异常值处理:
检测异常值
发现异常值的方法是对数据进行描述性统计。使用describe函数可以生成描述统计结果,然后观察异常值的存在。超出数据正常范围的值即为异常值。
异常值处理:
检测到了异常值,我们需要对其进行一定的处理。而一般异常值的处理方法可大致分为以下几种:
- 直接将含有异常值的记录删除;
- 将异常值视为缺失值,利用缺失值处理的方法进行处理;
- 可用前后两个观测值的平均值修正该异常值;
- 直接在具有异常值的数据集上进行数据挖掘。
是否要删除异常值可根据实际情况考虑。因为一些模型对异常值不很敏感,即使有异常值也不影响模型效果。
import pandas as pd
def clean():
#********** Begin *********#
fd1=pd.read_csv('step2/message.csv',header=0)
fd2=fd1.dropna().drop_duplicates().reset_index()
return fd2
#********** End **********#
if __name__ == '__main__':
print(clean())