前面我們介紹了Series知道它是類似于一維數(shù)組的對(duì)象,由一組數(shù)據(jù)以及之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。今天介紹的**DataFrame**它是Pandas中的一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu)(即類似excel的**二維表**),包含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾型等),而且DataFrame即有行索引也有列索引。
#### DataFrame的創(chuàng)建
DataFrame的創(chuàng)建方式有如下幾種:
> 1. 通過(guò)等?列表創(chuàng)建
> 2. 通過(guò)Numpy數(shù)組創(chuàng)建
> 3. 通過(guò)字典創(chuàng)建
> 4. 讀取數(shù)據(jù)文件創(chuàng)建
##### 通過(guò)等?列表創(chuàng)建
```
list1 = [[5,2,0,4],[2,3,4,5],[3,6,1,9],[4,1,0,8]]
df=pd.DataFrame(list1)
df
```
默認(rèn)會(huì)添加上行和列的索引(都是從0開始的依次往下遞增)
我們也可以設(shè)置索引值,通過(guò)index和columns屬性
```
list1 = [[5,2,0,4],[2,3,4,5],[3,6,1,9],[4,1,0,8]]
df=pd.DataFrame(list1,index=list('1234'),columns=list('ABCD'))
df
```
則根據(jù)屬性設(shè)置的索引展示
上面的方式適合數(shù)據(jù)量賊小,才這樣創(chuàng)建。
##### 通過(guò)Numpy數(shù)組創(chuàng)建
比如我們需要?jiǎng)?chuàng)建一個(gè)隨機(jī)數(shù)組成的4*6的DataFrame,同時(shí)設(shè)置行或者列索引,但是要根據(jù)自己的需求來(lái)定,可以如下:
```
df=pd.DataFrame(np.random.randn(4,6),index=list('ABCD'),columns=list('123456'))
df
```
結(jié)果:
但是要注意index和columns后面設(shè)置的索引要與數(shù)組的shape保持一致才可以,否則報(bào)錯(cuò)。
##### 通過(guò)字典創(chuàng)建
通過(guò)字典創(chuàng)建就輕松很多,字典的數(shù)據(jù)可以來(lái)自爬蟲,將爬取的各種數(shù)據(jù)保存成DataFrame的格式,便于日后的數(shù)據(jù)分析。
假設(shè)我們有一組persons數(shù)據(jù)為字典格式:
```
persons={'name':['小花','狗蛋','二狗','小草'],'age':[17,20,30,20],'gender':['女','男','男','女']}
df=pd.DataFrame(dic1)
df
```
輸出結(jié)果:
##### 讀取數(shù)據(jù)文件創(chuàng)建
如果你的數(shù)據(jù)在某個(gè)excel或者csv,又或者在數(shù)據(jù)庫(kù)中,我們可以通過(guò)讀取這些數(shù)據(jù),轉(zhuǎn)成DataFrame對(duì)象。
> pd.read_csv(filepath_or_buffer,header,parse_dates,index_col)
> 參數(shù):
>
> 1. filepath_or_buffer:
> 字符串,或者任何對(duì)象的read()方法。這個(gè)字符串可以是URL,有效的URL方案包括http、ftp、s3和文件??梢灾苯訉懭?文件名.csv"
>
> 2. header:
> 將行號(hào)用作列名,且是數(shù)據(jù)的開頭。
> 注意當(dāng)skip_blank_lines=True時(shí),這個(gè)參數(shù)忽略注釋行和空行。所以header=0表示第一行是數(shù)據(jù)而不是文件的第一行。
>
> 默認(rèn)header=0(即第一行,索引從0開始)為列索引
```
# 作用:將csv文件讀入并轉(zhuǎn)化為DataFrame對(duì)象。
pd.read_csv('douyin.csv')
輸出結(jié)果:
# 使用方法通過(guò)read_csv()
pd.read_excel('阿里巴巴2017年股票數(shù)據(jù).xlsx')
```
輸出結(jié)果:
當(dāng)然也可以連接數(shù)據(jù)庫(kù)完成數(shù)據(jù)的DataFrame加載
> 步驟1:創(chuàng)建連接對(duì)象,需要提前:pip install pymysql
>
> 其中user是你連接mysql數(shù)據(jù)庫(kù)的用戶名,password表示用戶密碼,database表示要連接的數(shù)據(jù)庫(kù)名字,charset表示編碼
>
> import pymysql
>
> con = pymysql.connect(host=localhost, user=username, password=password, database=dbname, charset=‘utf8’, use_unicode=True)
>
> 步驟2:定義sql語(yǔ)句
>
> sql_cmd = 'select * from 表名'
>
> df = pd.read_sql(sql_cmd, con)
#### DataFrame對(duì)象的常用操作
常用的屬性有:
> index:返回df的索引,即行標(biāo)簽
>
> columns:返回df的列名,即列標(biāo)簽
>
> df.dtypes:返回df每一列的數(shù)據(jù)類型
>
> df.values:以numpy的形式返回df中的值
常用操作有:
> head() 使用head可以查看前幾行的數(shù)據(jù),默認(rèn)的是前5行,不過(guò)也可以自己設(shè)置。
>
> tail(). 使用tail可以查看后幾行的數(shù)據(jù),默認(rèn)也是5行,參數(shù)可以自己設(shè)置。
>
> astype(). 轉(zhuǎn)換指定數(shù)據(jù)類型
>
> isna 檢測(cè)缺失值
>
> notna 檢測(cè)沒有缺失值
>
> describe() 可以對(duì)數(shù)據(jù)根據(jù)列進(jìn)行描述性統(tǒng)計(jì),比如最大值,最小值等
同理df.notna() 檢測(cè)沒有缺失值,與df.isna()相反,就不演示了。
更多關(guān)于python培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗(yàn),采用全程面授高品質(zhì)、高體驗(yàn)培養(yǎng)模式,擁有國(guó)內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實(shí)現(xiàn)高薪夢(mèng)想。
注:本文部分文字和圖片來(lái)源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系刪除。版權(quán)歸原作者所有!