第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 118
Energy 80
Technology 44
Motor Vehicles & Parts 34
Wholesalers 28
Health Care 27
Food & Drug Stores 20
Transportation 19
Telecommunications 18
Retailing 17
Food, Beverages & Tobacco 16
Materials 16
Industrials 15
Aerospace & Defense 14
Engineering & Construction 13
Chemicals 7
Media 3
Hotels, Restaurants & Leisure 3
Business Services 3
Household Products 3
Apparel 2
Name: 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())