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