Python数据分析处理库Pandas

时间:2022-08-13 15:50:07


一、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)"]/1000print(data_1000) = data_1000# 还可以再加一列food_info["Calcium_(g)"] = data_1000
取一列当中最大值,最小值同理
data_max = food_info["Calcium_(mg)"].max()

3、数据预处理
排序:
# -*- coding: UTF-8 -*-import pandasfood_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 pandasimport numpy# 打开csv文件titanic_train = pandas.read_csv("titanic_train.csv")# print(titanic_train.head())age = titanic_train["Age"]# 将age的数据检查,有数据则为True,没有数据为Falseage_isnull = pandas.isnull(age)# print(age_isnull)# 拿到没有数据的age值age_null_true = age[age_isnull]# print(age_null_true)# print(len(age_null_true))# 拿到有数据的agegood_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 pandasimport numpytitanic_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)# 输出的结果:             FarePclass           1       84.1546872       20.6621833       13.675550                Fare  SurvivedEmbarked                      C         10072.2962        93Q          1022.2543        30S         17439.3988       217