一、Pandas的构建
# -*- coding: UTF-8 -*- import pandas from pandas import DataFrame data = {'state':['Ohino','Ohino','Ohino','Nevada','Nevada'], 'year':[2000,2001,2002,2001,2002], 'pop':[1.5,1.7,3.6,2.4,2.9]} DF = DataFrame(data) print(DF) # 输出结果: pop state year 0 1.5 Ohino 2000 1 1.7 Ohino 2001 2 3.6 Ohino 2002 3 2.4 Nevada 2001 4 2.9 Nevada 2002
二、Pandas处理数据:
注:(因为涉及到文件不同,输出内容不同,该文章不加输出结果,有想要测试的可以评论留邮箱,我发文件)
1、读取csv文件,使用read_csv函数
food_info = pandas.read_csv("food_info.csv") print(food_info) # print(type(food_info)) # print(food_info.dtypes)
print(food_info.head(3)) # 默认取前5条数据,如需自定义所取数,传数字即可 print(food_info.tail(3)) # 默认取后5条数据,如需自定义所取数,传数字即可 print(food_info.columns) # 每列数据的标题
2、索引与计算
行:
print(food_info.loc[[0, 2, 4]]) # 取到第0、2、4行的数据 print(food_info.loc[0:1]) # 取到第1行到第二行的数据列:
data_col = food_info["NDB_No"] # NDB_No为第1列的标题 print(data_col) # data_cols = food_info[["NDB_No","Shrt_Desc"]] # 取多列数据拿到每列标题并转为list
print(food_info.columns) col_list = food_info.columns.tolist() print(col_list)从上述的col_list中找到标题以“g”结尾的列数据
titles_g = [] for col_title in col_list: if col_title.endswith("(g)"): titles_g.append(col_title) data_g = food_info[titles_g] print(data_g.head(3))计算:csv表中有一列数据单位是mg,我们需要将该列数据转为g为单位,那么这列数据除以1000即可,然后可以替换原表中数据
data_1000 = food_info["Calcium_(mg)"]/1000 print(data_1000) = data_1000 # 还可以再加一列 food_info["Calcium_(g)"] = data_1000取一列当中最大值,最小值同理
data_max = food_info["Calcium_(mg)"].max()
3、数据预处理
排序:
# -*- coding: UTF-8 -*- import pandas food_info = pandas.read_csv("food_info.csv") # sort_values函数,让表根据Water_(g)这一列的值排列,inplace是否在原文件上修改,ascending指是否升序 new_food_info = food_info.sort_values("Water_(g)",inplace=False,ascending=False) # print(new_food_info) # 让index值根据排序后reset,可以将上下两个打印出来做index的对比 new_food_info_reIndexed = new_food_info.reset_index(drop=True) print(new_food_info_reIndexed)预处理数据,(计算表中一列数据的平均值,这一列数据有无效数据,故需要拿到有效数据后再算average):
# -*- coding: UTF-8 -*- import pandas import numpy # 打开csv文件 titanic_train = pandas.read_csv("titanic_train.csv") # print(titanic_train.head()) age = titanic_train["Age"] # 将age的数据检查,有数据则为True,没有数据为False age_isnull = pandas.isnull(age) # print(age_isnull) # 拿到没有数据的age值 age_null_true = age[age_isnull] # print(age_null_true) # print(len(age_null_true)) # 拿到有数据的age good_ages = age[age_isnull==False] # print(good_ages) # 算age的平均值 age_average = sum(good_ages)/len(good_ages) print(age_average)直接用函数算平均值
# 求均值的函数 age_average_mean = age.mean() print(age_average_mean)定点取数据
# 拿到第60行,"Age"的值 row_index60_age = titanic_train.loc[60,"Age"] print(row_index60_age) # 输出结果是: 22.0
4、根据index为基准,对value作相应的计算
# -*- coding: UTF-8 -*- import pandas import numpy titanic_train = pandas.read_csv("titanic_train.csv") # passenger_class = [1,2,3] # Fare_by_class = {} # for this_clas in passenger_class: # pclass_rows = titanic_train[titanic_train["Pclass"] == this_clas] # pclass_fares = pclass_rows["Fare"] # Fare_by_class[this_clas] = pclass_fares.mean() # print(Fare_by_class) # 需要统计的数据以index为基准,需要统计的值是value,aggfunc需要统计value的关系函数,默认是mean(平均值) passenger_survival = titanic_train.pivot_table(index="Pclass", values="Fare", aggfunc=numpy.mean) print(passenger_survival) # 分别计算Fare与Survived的和,根据Embarked为基准 passenger_survival_2 = titanic_train.pivot_table(index="Embarked",values=["Fare","Survived"],aggfunc=numpy.sum) print(passenger_survival_2) # 输出的结果: Fare Pclass 1 84.154687 2 20.662183 3 13.675550 Fare Survived Embarked C 10072.2962 93 Q 1022.2543 30 S 17439.3988 217