0.簡介
“Python Data Analysis Library 或 pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的氧敢。Pandas 納入了大量庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型吓揪,提供了高效地操作大型數(shù)據(jù)集所需的工具第步。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法校焦。你很快就會發(fā)現(xiàn)俏脊,它是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一茸俭〉趼模”——百度百科
1.初識Pandas
1.1引包
import pandas
import numpy
1.2讀取csv文件
data=pandas.read_csv('1.csv',encoding='gbk')
print(data)
print(data.dtypes)
1.3基本數(shù)據(jù)結(jié)構(gòu)
# 直接取出來的數(shù)據(jù)放入的是DataFrame
print(type(data))
# DataFrame的某幾列--->成為Series
print(type(data["id"]))
# DataFrame的某幾行--->仍然是DataFrame
print(type(data.loc[0:3]))
# DataFrame的某幾列的某幾行--->成為Series
print(type(data["id"].loc[0:3]))
print(data.columns)
print(data.shape)
2.可視化顯示部分?jǐn)?shù)據(jù)
data.head() # 默認(rèn)前五行
data.head(3)# 也可以指定默認(rèn)前幾行
data.tail() #默認(rèn)顯示后五行
# 指定顯示某一行
print(data.loc[1])
data.loc[1]
# 指定某幾行
data.loc[1:3]
data.loc[[1,3,5]]
# 取出 指定行 指定列 的值
data.loc[1,"性別"]
# 取出指定的列
print(data["id"])
print(data[["id","性別"]])
# 獲取滿足條件的某些數(shù)據(jù)
print(data[data["年齡"]>30])
3.操作字段名
list_title=data.columns.tolist()
print(list_title)
print(type(list_title))
# 對存儲所有字段的list進(jìn)行操作后,可獲取指定的列
print(data[list_title])
4.基本操作
4.1四則運算
與numpy一樣调鬓,都是對整體進(jìn)行操作
4.2函數(shù)
# 某一列的最大值艇炎,最小值,排序
print(data["年齡"].max())
print(data["年齡"].min())
# 求均值(會自動過濾掉 那些有缺失值的數(shù)據(jù)腾窝,進(jìn)而求平均值)
print(data["年齡"].mean())
data.sort_values("年齡",inplace=True)
#第一個參數(shù)指排序的字段(默認(rèn)升序)缀踪,第二個參數(shù)是否替換data本身的數(shù)據(jù)(新生成一個DataFrame,并讓data指向ta)
print(data)
# 第三個參數(shù)——升降序
data.sort_values("年齡",inplace=True,ascending=False)
print(data)
# 排序后虹脯,重做索引值
print(data.reset_index(drop=True))
5.截取部分?jǐn)?shù)據(jù)
#取出某一列
data_tian=data["*天門冬氨酸氨基轉(zhuǎn)換酶"]
print(data_tian)
#判斷某一列中那些為空
data_tian_isnull=pandas.isnull( data["*天門冬氨酸氨基轉(zhuǎn)換酶"])
#print(data_tian_isnull)
#將為空的數(shù)據(jù)取出
data_tian__null=data_tian[data_tian_isnull]
#print(data_tian__null)
# 判斷有多少是為空的數(shù)據(jù)
#print(len(data_tian__null))
# 取出非空的數(shù)據(jù)
data_is_not_null=data_tian[data_tian_isnull==False]
# 判斷非空的數(shù)據(jù)的平均值
print(sum(data_is_not_null)/len(data_is_not_null))
# pandas在求平均值時會自動過濾到那些沒有值的數(shù)據(jù)
print(data_tian.mean())
6.求出表中某些字段(values)與指定字段(index)之間在某方面(aggfunc)的對應(yīng)關(guān)系
print(data.pivot_table(index="性別",values="*天門冬氨酸氨基轉(zhuǎn)換酶",aggfunc=numpy.mean))
print(data.pivot_table(index="性別",values="年齡",aggfunc=numpy.mean))
7.處理“空數(shù)據(jù)”
#取出某一列
data_tian=data["*天門冬氨酸氨基轉(zhuǎn)換酶"]
print(data_tian)
# 可以根據(jù)需求將某些值drop掉 axis=0 表示去掉有空數(shù)據(jù)的行
print(data_tian.dropna(axis=0))
# 可以根據(jù)需求驴娃,去掉在某些列(subset=)上為空的數(shù)據(jù)的行
print(data.dropna(axis=0,subset=["*天門冬氨酸氨基轉(zhuǎn)換酶"]))
# 可以根據(jù)需求去掉某些存在 空數(shù)據(jù)的 某些列
print(data.dropna(axis=1))
8.apply函數(shù)
8.1定義一個函數(shù),該函數(shù)只有一個參數(shù) 參數(shù)的類型為: 一個集合(DataFrame)
def get_first_Column(column):
colu_1=column.loc[0]
return colu_1
8.2可以直接調(diào)用集合(DataFrame)本身的apply函數(shù)循集,來調(diào)用自定義函數(shù)
data_first=data.apply(get_first_Column)
print(data_first)
8.3 例子一枚
統(tǒng)一集合各個字段為空數(shù)據(jù)的個數(shù)
def isnull_count(column):
is_null=pandas.isnull(column)
data_is_null=column[is_null]
return len(data_is_null)
data_is_null=data.apply(isnull_count)
print(data_is_null)
9.Series
9.1介紹
DataFrame 的子結(jié)構(gòu) series
DataFrame 是series的集合 唇敞,series是數(shù)據(jù)的集合
series是DataFrame的某一列或某幾列。相當(dāng)于是numpy中的ndarray
from pandas import Series
School_Data=pandas.read_csv('yxxx.csv',encoding='gbk')
print(type(School_Data))
School_Data_code=School_Data["院校代碼"]
School_Data_name=School_Data["院校名稱"]
# print(School_Data_code)
# print(School_Data_name)
print(type(School_Data_code))
9.2手動的構(gòu)造一個Series
步驟:
①引包from pandas import Series,
②獲取兩個ndarray(其中一個當(dāng)索引疆柔,也可以沒有索引使用默認(rèn)的)
School_Data_code_values=School_Data_code.values
School_Data_name_values=School_Data_name.values
print(type(School_Data_code_values))
school_infor=Series(School_Data_name_values,index=School_Data_code_values)
#print(school_infor)
9.3獲取指定的數(shù)據(jù)
在指明了索引的情況下可以采用指定的索引來定位具體的數(shù)據(jù)蕉世,也可以根據(jù)默認(rèn)的索引獲取指定的數(shù)據(jù)
# 采用的是系統(tǒng)指定的索引
print(school_infor['10186'])
print(school_infor[['10186','10001']])
# 使用的是默認(rèn)的索引
print(school_infor[0:3])
9.4重構(gòu) Series的索引
可以對Series的索引進(jìn)行排序,然后重新定義Series的索引
#1.獲取舊Series的索引
school_index=school_infor.index.tolist()
print(type(school_index))
# 2.對索引進(jìn)行排序
school_index_sort=sorted(school_index)
# 3.重新設(shè)置Series的索引
school_infor_sort=school_infor.reindex(school_index_sort)
# print(school_infor_sort)
以上的步驟可以采用Series中的函數(shù)來處理
print(school_infor.sort_index())
當(dāng)然也可以針對Series的值進(jìn)行排序
print(school_infor.sort_values())
Series可以轉(zhuǎn)換成numpy中的ndarray來處理
print(help(numpy.add))