五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【Pandas】Pandas基礎(chǔ)知識(shí)匯總

2023-01-30 10:09 作者:阿提艾斯  | 我要投稿

1. Pandas作用

用于數(shù)據(jù)分析、數(shù)據(jù)處理數(shù)據(jù)可視化。


2. Pandas數(shù)據(jù)讀取

pandas數(shù)據(jù)讀取

使用pandas首先要導(dǎo)入包:


2.1 讀取csv文件

加載以逗號(hào)為分隔符的CSV(Comma-Separated Values)文件

  • ?pd.read_csv(),參數(shù)如下:

    • sep: 指定分隔符

    • names: list類型,指定columns名稱

    • engine: 使用的分析引擎。可以選擇C或者是python。C引擎快但是Python引擎功能更加完備。

    • header: 用作列名的行號(hào),以及數(shù)據(jù)。

      • 默認(rèn)是infer,會(huì)將文件第一行數(shù)據(jù)作為列名,等同于header=0。

      • None,會(huì)默認(rèn)生成數(shù)字0,1,2,3...作為列名。

      • 數(shù)字n,會(huì)將數(shù)據(jù)的第n行作為列名。

CSV文件的第一行指定列的數(shù)據(jù)頭

如果CSV文件第一行沒有數(shù)據(jù)頭,read_csv參數(shù)中需要指定: header=None


2.2 讀取excel文件

  • pd.read_excel(), 讀取excel文件,參數(shù)如下:

    • skiprows: 忽略行數(shù),pandas處理的時(shí)候會(huì)忽略前n行

  • df.to_execl(): 將df數(shù)據(jù)存入到excel文件,參數(shù)如下:

    • index: False,存文件時(shí)不會(huì)把索引名稱 存進(jìn)去;為True則會(huì)連索引一并存儲(chǔ)。

2.3 讀取json文件


2.4 讀取數(shù)據(jù)庫

2.4.1 讀取Sqlite數(shù)據(jù)庫

2.4.2 讀取MySQL數(shù)據(jù)庫

2.5 查看數(shù)據(jù)

3. pandas數(shù)據(jù)結(jié)構(gòu)

3.1 DataFrame

DataFrame是二維數(shù)據(jù)。既有行索引index,也有列索引columns。

類型: <class 'pandas.core.frame.DataFrame'>

3.1.1 根據(jù)多個(gè)字典序列創(chuàng)建DataFrame

運(yùn)行結(jié)果:

3.1.2 多維數(shù)組創(chuàng)建DataFrame

運(yùn)行結(jié)果:

3.1.3 查詢DataFrame數(shù)據(jù)

3.2 Series

Series: 一維數(shù)據(jù),一行或一列。

3.2.1 使用list列表創(chuàng)建Series

運(yùn)行結(jié)果:

也可以指定索引名稱,替換掉自動(dòng)生成的數(shù)字索引

運(yùn)行結(jié)果:

3.2.2 使用字典創(chuàng)建Series

使用字典生成的Series,索引為字典的key值

運(yùn)行結(jié)果:

3.2.3 根據(jù)標(biāo)簽索引查詢數(shù)據(jù)

4. Pandas查詢數(shù)據(jù)

4.1 loc方法

根據(jù)行、列的標(biāo)簽值查詢。

4.1.1 使用單個(gè)label值查詢數(shù)據(jù)

得到單個(gè)值:

得到一個(gè)Series:

4.1.2 使用值列表批量查詢

獲取行索引為1和2,列索引為‘身高’數(shù)據(jù),返回類型為Series

獲取行索引為1和2,列索引為‘身高’和'體重'的數(shù)據(jù),返回類型為DataFrame

4.1.3 使用數(shù)值區(qū)間進(jìn)行范圍查詢

行索引按區(qū)間查詢:

列索引按區(qū)間查詢:

行和列都按區(qū)間查詢:

4.1.4 使用條件表達(dá)式查詢

查詢身高大于等于1.75的所有行記錄:

當(dāng)有多個(gè)條件時(shí),可以像下面這些寫,&符號(hào)不要切換成and

4.1.5 調(diào)用函數(shù)查詢

1)使用匿名表達(dá)式查詢

2)自定義函數(shù)查詢

查找出愛好為看書的記錄

4.2 iloc方法

根據(jù)行、列的數(shù)字位置查詢

4.3 where方法

待補(bǔ)充...

4.4 query方法

待補(bǔ)充...

5. 數(shù)據(jù)新增與更新

5.1 直接賦值

例1:讓所有記錄的體重列增加1kg

例2: 新增列'身高/體重',計(jì)算所有記錄的該比值

或者寫為如下形式

5.2 df.apply方法

對(duì)某一列統(tǒng)一做函數(shù)處理,注意axis=1表示的是列索引,axis=0表示的是行索引。

5.3 df.assign方法

assign方法不會(huì)修改原有的dataframe

例1:將所有記錄的體重翻倍,并賦給新列

5.4 按條件選擇分組分別賦值

條件判斷里寫的時(shí)候需要注意,在python中1<a<10這種寫法是可以的,但是在.loc方法里這樣寫會(huì)報(bào)錯(cuò),所以遇到這種情況,需要使用&符號(hào)連接多個(gè)條件來寫。

查看dataframe:

6. Pandas數(shù)據(jù)統(tǒng)計(jì)函數(shù)

6.1 匯總類統(tǒng)計(jì)

  • 提取所有數(shù)字列統(tǒng)計(jì)結(jié)果

  • 獲取身高列的最小值

  • 獲取年齡列的平均值

6.2 唯一去重和按值計(jì)數(shù)

  • 唯一性去重

  • 按值計(jì)數(shù)

6.3 相關(guān)系數(shù)和協(xié)方差

6.3.1 概念

對(duì)于兩個(gè)變量X、Y:

  • 協(xié)方差: 衡量同向反向程度,如果協(xié)方差為正,說明X,Y通向變化,協(xié)方差越大說明同向程度越高;如果協(xié)方差為負(fù),說明X,Y反向運(yùn)動(dòng),協(xié)方差越小說明反向程度越高。

  • 相關(guān)系數(shù):衡量相似度程度,當(dāng)他們的相關(guān)系數(shù)為1時(shí),說明兩個(gè)變量變化時(shí)的正向相似度最大,當(dāng)相關(guān)系數(shù)為-1時(shí),說明兩個(gè)變量變化的反向相似度最大。

6.3.2 相關(guān)方法

  • 協(xié)方差矩陣

  • 相關(guān)系數(shù)矩陣

  • 單獨(dú)計(jì)算相關(guān)系數(shù)

計(jì)算年齡和體重的相關(guān)系數(shù)

7. Pandas對(duì)缺失值的處理

7.1 監(jiān)測(cè)缺失值

  • isnull(): 判斷df每個(gè)元素是否為null,是null為True,不是null為False。

單個(gè)列判斷是否都為空:

  • notnull():和isnull()相反,判斷df各個(gè)元素是否不為null,不是null為True,是null為False。

篩選體重已登記的行:

7.2 丟棄缺失值

  • dropna:丟棄、刪除缺失值,以下是該函數(shù)的三個(gè)參數(shù):

    • aixs:刪除行還是列,{0 or 'index', 1 or 'columns'}, default 0。

    • how:如果等于any則任何值為空都刪除,如果等于all則所有值都為空才刪除。

    • inplace:如果為true則修改當(dāng)前df,否則返回新的df。

刪除全是空值的列

7.3 填充缺失值

  • fillna:填充空值,參數(shù)如下:

    • value: 用于填充的值,可以是單個(gè)值,或者字典(key是列明,value是值)。

    • method: 等于ffile使用前一個(gè)不為空的值填充forword fill;等于bfill使用后一個(gè)不為空的值填充 backword fill。

    • axis: 按行還是列填充,{0 or 'index', 1 or 'columns'}

    • inplace: 如果為true則修改當(dāng)前df,否則返回新的df。

將體重為空的元素填充為100,默認(rèn)是生成新的df,如果想在原有df上修改,需要添加參數(shù)inplace=True

等同于

8. Pandas的SettingWithCopyWarning告警

pandas不允許先篩選子dataframe,再進(jìn)行修改寫入。

兩種解決方案:

  • 使用.loc實(shí)現(xiàn)一個(gè)步驟直接修改源dataframe。

  • 先復(fù)制一個(gè)dataframe再一個(gè)步驟執(zhí)行修改。

9. Pandas數(shù)據(jù)排序

9.1 Series排序

  • Series.sort_values(): 對(duì)Series進(jìn)行排序,參數(shù)如下:

    • ascending: 默認(rèn)為True升序排序,為False降序排序

    • inplace: 是否修改原始Series

例子1:對(duì)體重列進(jìn)行升序排序

例子2: 對(duì)體重列進(jìn)行降序排列

9.2 DataFrame排序

  • DataFrame.sort_values(): 對(duì)DataFrame進(jìn)行排序,參數(shù)說明如下:

    • by: 字符串或者list<字符串>,單列排序或者隊(duì)列排序

    • ascending: bool或者list,升序還是降序,如果是list對(duì)應(yīng)by的多列

    • inplace: 是否修改原始DataFrame

例子1:單列排序

按照體重進(jìn)行排序,默認(rèn)升序

如果想要降序排列,只需要添加參數(shù)ascending=False即可。

例子2: 多列排序

按照年齡和體重排序

按照年齡和體重排序,但是年齡按升序排,體重按降序排:



10. Pandas字符串處理

處理過程如下:

1)先獲取Series的str屬性,然后在屬性上調(diào)用函數(shù);

2)只能在字符串列上使用,不能數(shù)字列上使用;

3)DataFrame上沒有str屬性和處理方法;

4)Series.str并不是Python原生字符串,而是自己的一套方法,大部分和原生str很相似。

  • 字符串替換: replace

替換為閱讀

也可以寫為如下形式,Series.str默認(rèn)開啟了正則表達(dá)式模式,也可以通過參數(shù)regex=False進(jìn)行關(guān)閉。

  • 判斷是不是數(shù)字: isnumeric

  • 計(jì)算字符串長度: len

  • 以特定字符/字符串開頭: startswith

  • 包含特定字符/字符串: contains

11.? Pandas的axis參數(shù)

  • axis=0或者"index"

    • 如果是單行操作,就指的某一行

    • 如果是聚合操作,指的是跨行cross rows

  • axis=1或者"columns"

    • 如果是單列操作,就指的某一列

    • 如果是聚合操作,指的是跨列cross columns

例子1: 刪除一行數(shù)據(jù)

例子2: 刪除一列數(shù)據(jù)

例子3: 驗(yàn)證axis=0,如果是聚合操作,指的是跨行cross rows

下方代碼是跨行求平均值

先看下運(yùn)行結(jié)果,發(fā)現(xiàn)計(jì)算的是每一列的平均值。跨行指的就是列不動(dòng),從行的方向上依次計(jì)算每列的聚合操作結(jié)果

例子4: 驗(yàn)證axis=1, 如果是聚合操作,指的是跨列cross columns

下方代碼是跨列求平均值

從結(jié)果看出,計(jì)算的確實(shí)是每一行的平均值。跨列指的就是行不動(dòng),從列的方向上依次計(jì)算每行的聚合操作結(jié)果。

12. Pandas的索引index用途

用途:

  • 方便數(shù)據(jù)查詢

  • 獲得性能提升

  • 自動(dòng)數(shù)據(jù)對(duì)齊功能

  • 更多數(shù)據(jù)結(jié)構(gòu)支持

索引上的一些方法:

  • 索引是否單調(diào)遞增,是返回True,否返回False

  • 索引是否唯一,是返回True,否返回False

12.1 使用index查詢數(shù)據(jù)

將索引修改為user_id列,drop=False會(huì)讓user_id保留在column

drop=True之后,發(fā)現(xiàn)列user_id不見了。

根據(jù)索引,查詢id為2的數(shù)據(jù)

查詢結(jié)果:如果查詢結(jié)果只有一條記錄,會(huì)以鍵值對(duì)的形式展示出來.

如果查詢結(jié)果有多條記錄,會(huì)以表格形式展示出來。

12.2 使用index提升查詢性能

  • 如果index是唯一的,Pandas會(huì)使用哈希表優(yōu)化,查詢性能為O(1);

  • 如果index不是唯一的,但是有序,Pandas會(huì)使用二分查找算法,查詢性能為O(logN);

  • 如果index是完全隨機(jī)的,那么每次查詢都要掃描全表,查詢性能為O(N)。

12.3 使用index自動(dòng)對(duì)齊數(shù)據(jù)

參考下方代碼,當(dāng)兩個(gè)Series相加時(shí),相等的index對(duì)應(yīng)的列會(huì)被對(duì)應(yīng)相加,但是各自獨(dú)有的index,相加后變?yōu)榱薔aN。

12.4 使用index更多更強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)支持

  • CategoricalIndex,基于分類數(shù)據(jù)的Index,提升性能;

  • MultiIndex,多維索引,用于groupby多維聚合后結(jié)果等;

  • DatetimeIndex,時(shí)間類型索引,強(qiáng)大的日期和時(shí)間的方法支持。

13. Pandas的Merge語法

  • left, right: 要merge的dataframe或者有name的Series。

  • how: join類型, left, right, outer, inner

  • on: join的key,left和right都需要有這個(gè)key

  • left_on: left的df或者series的key

  • right_on: right的df或者series的key

  • left_index, right_index: 使用index而不是普通的column做join

  • suffixes: 兩個(gè)元素的后綴,如果列有重名,自動(dòng)添加后綴,默認(rèn)是('_x', '_y')

左連接、右連接、內(nèi)連接、外連接區(qū)別

14. Pandas的Concat合并

語法:pd.concat(objs, axis=0, join='outer', ignore_index=False)

  • objs: 一個(gè)列表,可以是DataFrame或者Series,也可以是DataFrame和Series的混合列表。

  • axis: 默認(rèn)是0,按行合并,如果等于1代表按列合并。

  • join: 合并的時(shí)候索引的對(duì)齊方式,默認(rèn)是outer join,也可以是inner join。

  • ignore_index: 是否忽略掉原來的數(shù)據(jù)索引。

15. Pandas拆分

拆分: df.iloc[]

例子:

16. Pandas分組統(tǒng)計(jì)groupby

groupby: 先對(duì)數(shù)據(jù)分組,然后在每個(gè)分組上應(yīng)用聚合函數(shù)、轉(zhuǎn)換函數(shù)。

16.1 groupby相關(guān)操作

  • 遍歷groupby結(jié)果

  • 獲取單個(gè)分組的數(shù)據(jù)

16.2 groupby實(shí)例

  • 單個(gè)列g(shù)roupby,查詢所有數(shù)據(jù)列的統(tǒng)計(jì)

求電影的平均分

  • 多個(gè)列g(shù)roupby,查詢所有數(shù)據(jù)列的統(tǒng)計(jì)

下方代碼會(huì)先對(duì)userId分組,然后再對(duì)movieId分組,然后再求分組后的其他列的平均值。此時(shí)的userId和movieId變成了二級(jí)索引。

下方代碼比上面的代碼多了參數(shù)as_index=False,A和B不再是索引,而是結(jié)果中的一部分。

  • 同時(shí)查看多種數(shù)據(jù)統(tǒng)計(jì)

求每部電影的評(píng)分總和、評(píng)分平均值、評(píng)分標(biāo)準(zhǔn)差

從結(jié)果可以看出列分出了二級(jí)索引。

  • 查看單列的結(jié)果數(shù)據(jù)統(tǒng)計(jì)

分組之后獲取某一列的總和、平均值和標(biāo)準(zhǔn)差

發(fā)現(xiàn)二級(jí)索引沒了,這里提前對(duì)分組后的列做了過濾,性能會(huì)更好。

  • 不同列使用不同的聚合函數(shù)

按電影id分組后,對(duì)評(píng)分求平均值和總和,對(duì)userId求個(gè)數(shù)。

17. Pandas分層索引

17.1 常用操作

  • 查看索引

以下會(huì)生成一個(gè)二級(jí)索引

  • 把二級(jí)索引變成列

  • 把所有索引都變成列

  • 設(shè)置索引

將元數(shù)據(jù)的userId和movieId設(shè)置為索引。

  • 對(duì)索引排序

18. 數(shù)據(jù)轉(zhuǎn)換函數(shù)map、apply、applymap

18.1 map

map只用于Series,實(shí)現(xiàn)每個(gè)值-》值的映射。

使用方法:

  • Series.map(dict)

  • Series.map(function)

18.2 apply

apply用于Series實(shí)現(xiàn)每個(gè)值的處理,用于Dataframe實(shí)現(xiàn)某個(gè)軸的Series的處理。

  • Series.apply(function)

  • DataFrame.apply(function)

18.3 applymap

只能用于DataFrame,用于處理該DataFrame的每個(gè)元素。

例子:

19. Pandas的stack和pivot實(shí)現(xiàn)數(shù)據(jù)透視

將列式數(shù)據(jù)變成二維交叉數(shù)據(jù),便于分析,叫做重塑或透視。

透視的方法:

19.1 使用unstack實(shí)現(xiàn)數(shù)據(jù)二維透視

stack: DataFrame.stack(level=-1, dropna=True),將column變成index

level=-1代表多層索引的最內(nèi)層,可以通過==0、1、2指定多層索引的對(duì)應(yīng)層。


unstack: DataFrame.unstack(level=-1, fill_value=None),將index變成column。


例子:

原始數(shù)據(jù)如下:

unstack之后的數(shù)據(jù)如下:

stack之后的數(shù)據(jù)如下:

參考代碼:

透視之后效果:

19.2 使用pivot簡(jiǎn)化透視

pivot: DataFrame.pivot(index=None, columns=None, values=None)


指定index、columns、values實(shí)現(xiàn)二維透視。


原始數(shù)據(jù):

參考代碼:

透視效果:

pivot方法相當(dāng)于對(duì)df使用set_index創(chuàng)建分層索引,然后調(diào)用unstack。


20. 參考資料

  • Pandas官方中文文檔: https://www.pypandas.cn/docs/getting_started/

  • 電影數(shù)據(jù)集: https://grouplens.org/datasets/movielens/


【Pandas】Pandas基礎(chǔ)知識(shí)匯總的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
搜索| 措美县| 张掖市| 平塘县| 宜君县| 绿春县| 天全县| 灌阳县| 合作市| 江达县| 宁国市| 库伦旗| 吉木乃县| 博乐市| 大姚县| 深圳市| 永定县| 长治市| 合水县| 饶平县| 江源县| 兰州市| 商水县| 彩票| 浦北县| 绥中县| 会理县| 淮北市| 佛坪县| 衡南县| 丰宁| 宜城市| 元江| 保康县| 龙川县| 沙湾县| 上栗县| 得荣县| 洪洞县| 光山县| 即墨市|