日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python实训day09am【Pandas、Series、DataFrame数据帧】

發(fā)布時間:2024/9/30 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python实训day09am【Pandas、Series、DataFrame数据帧】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • Python實訓-15天-博客匯總表

目錄

1、Pandas

1.1、安裝Pandas庫

1.2、兩種數據對象

2、一列數據Series

2.1、獲取Series與數據個數

2.2、切片-loc-iloc

2.3、更改元素-刪除元素

2.4、Series課堂練習

2.5、編程思想

3、多列數據DataFrame數據幀

3.1、賦值與索引

3.2、訪問元素與切片

3.3、修改元素值

3.4、刪除與增加行列

4、課堂練習

4.1、練習1

4.1.1、解法一

4.1.2、解法二

4.2、練習2


1、Pandas

今天:Pandas與表格數據處理(盡量完成)

下周:OS文件系統(tǒng)操作、面向對象、綜合練習(大作業(yè)中涉及到的技能點在這里講解)、大作業(yè)(2天半左右)[下周提前布置題目]

excel表處理 - 小的爬蟲demo? ? ? ? ?鍛煉編程能力

1.1、安裝Pandas庫

安裝pandas庫:pip install pandas -i [清華鏡像],pip install pandas -i? https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

?引入庫:import pandas as pd,as pd:取別名。

1.2、兩種數據對象

兩種類型的對象數據:

  • Series:(系列)一列數據
  • DataFrame:(數據幀)多列數據(表)
  • 2、一列數據Series

    2.1、獲取Series與數據個數

    import pandas as pd# 獲取Series sr1 = pd.Series(['a', 'b', 'c', 'd', 'e', 'f', 'g']); # 集合 print(sr1) # 索引index+數據 # 0 a # 1 b # 2 c # 3 d # 4 e # 5 f # 6 g # dtype: object print(type(sr1)) # <class 'pandas.core.series.Series'>print(len(sr1)) # 數據個數 7 print(sr1.index.size) # 數據個數 7 print(sr1.index); # 獲取索引 RangeIndex(start=0, stop=7, step=1) print(list(sr1.index)) # 轉為列表 [0, 1, 2, 3, 4, 5, 6]# 索引就是一個集合,可以是數字,也可以是字符串,甚至可以是字符串混合數字,要求個數是匹配的 sr1.index = ['row1', 'row2', 'row3', 'row4', 'row5', 'row6', 7] print(sr1) # row1 a # row2 b # row3 c # row4 d # row5 e # row6 f # 7 g # dtype: object

    2.2、切片-loc-iloc

    import pandas as pdsr1 = pd.Series(['a', 'b', 'c', 'd', 'e', 'f', 'g']); # 集合 sr1.index = ['row1', 'row2', 'row3', 'row4', 'row5', 'row6', 7]# 通過索引來獲取某一個數據 print(sr1['row1']) # a # 獲取所有的數據 print(sr1.values); # 數據列表 ['a' 'b' 'c' 'd' 'e' 'f' 'g']# loc-->location,通過索引來獲取值 # sr1.loc[索引],獲取該索引對應的值,相當于sr1[索引] print(sr1.loc['row1']) # a# 竟然字符串也能切片,不同點就是,使用loc切片,包前也包后!!!! print(sr1.iloc[1:-1]) # row2 b # row3 c # row4 d # row5 e # row6 f # dtype: object print(sr1.loc['row1':'row3']) # row1 a # row2 b # row3 c # dtype: object # iloc-->index_location 通過下標(行號,第幾行)來獲取值 print(sr1.iloc[0]) # sr1.iloc[數字] a# iloc也是可以切片的 print(sr1.iloc[0:3]) # iloc包前不包后!!!! # row1 a # row2 b # row3 c # dtype: object# 寫代碼幾乎是不需要你記憶細節(jié)點!!! # 錯了就錯了,再改過來就行,改的次數多了,你自然就記住了。 # 技能的掌握,不是靠記憶,而是靠練習;通過練習來記憶。

    2.3、更改元素-刪除元素

    import pandas as pdsr1 = pd.Series(['a', 'b', 'c', 'd', 'e', 'f', 'g']); # 集合 sr1.index = ['row1', 'row2', 'row3', 'row4', 'row5', 'row6', 'row7']# 改: sr1['row1'] = 'A'; sr1.loc['row2'] = 'B' sr1.iloc[2] = 'C'; sr1.iloc[3:6] = ['D', 'E', 'F']; # 你猜可以不?可以!print(sr1) # row1 A # row2 B # row3 C # row4 D # row5 E # row6 F # row7 g# 刪掉一行,通過索引來刪除行 sr1.pop('row6') # 返回被刪除的元素值 del sr1['row7']print(sr1) # row1 A # row2 B # row3 C # row4 D # row5 E

    2.4、Series課堂練習

    課堂練習:
    1.生成一個Series,有26條數據,分別是英文的26個字母,但是要求大小寫是隨機的,index的值分別為row1~row26
    2.處理Series:有多少個大寫字母、有多少個小寫字母、將所有的小寫字母轉換為大寫字母。

    ''' 課堂練習: 1.生成一個Series,有26條數據,分別是英文的26個字母,但是要求大小寫是隨機的,index的值分別為row1~row26 2.處理Series:有多少個大寫字母、有多少個小寫字母、將所有的小寫字母轉換為大寫字母。 ''' import random as rd import pandas as pdsa = [chr(x) for x in range(65, 65 + 26)] # 列表生成式 for i in range(26):if rd.randint(0, 1) == 1: # 50%的概率sa[i] = sa[i].lower() # 大寫轉小寫 print(sa) # ['a', 'B', 'C', 'd', 'e', 'F', ...,'w', 'X', 'y', 'z']ids = ['row' + str(x) for x in range(1, 27)]; series = pd.Series(sa, index=ids); # series = pd.Series(sa); series.index = ids; # 設置索引index print(series) # row1 a # row2 B # row3 C # ... # dtype: object# ids = list(series.index); num = 0; # 小寫字母數量 for index in ids:if series[index] >= 'a': # 判斷是否為小寫字母num = num + 1;series[index] = series[index].upper();print('小寫字母個數:', num) print('大寫字母個數:', 26 - num) print('統(tǒng)一轉成大寫后:') print(series) # row1 A # row2 B # row3 C # ... # dtype: object

    2.5、編程思想

    感受:Series其實就相當于list,比list多了一個index索引值而已。

    那么就可以通過索引來操作數據-[索引]:loc[索引]、pop(索引)、del(索引);
    如果不想通過索引來操作數據:iloc[下標]。
    ? ??
    每個人有不同的編程習慣:一個對象可能會有100個操作方法,根據不同的習慣,自己選擇其中喜歡的解決問題的辦法即可。

    100個--掌握-->10個左右

    最傳統(tǒng)的思想:
    ? ? 背字典思路 ?--->??把所有的問題,所有的細枝末節(jié)都了如指掌 ---> 累 ---> 放棄?--->?從入門到放棄?
    ? ? (貪欲,掌控欲) ---> 不利于你長遠發(fā)展

    3、多列數據DataFrame數據幀

    3.1、賦值與索引

    import pandas as pd# 多列數據-數據幀-DataFrame # [] --> Series # [ [] ,[] ,[] ,[] ,[] ] ---> DataFramedf = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]]);print(df); # 注意,每個列表對應的是一行數據!!!!!!!! # 0 1 2 3 # 0 a b c d # 1 1 2 3 4print(list(df.index)) # index行索引,跟Series一樣 [0, 1] print(df.index.size) # 2 print(list(df.columns)); # column列索引,Series中沒有 [0, 1, 2, 3] print(df.columns.size) # 4df.index = ['row1', 'row2'] # 行索引換名 df.columns = ['col1', 'col2', 'col3', 'col4'] # 列索引換名 print(df) # col1 col2 col3 col4 # row1 a b c d # row2 1 2 3 4

    3.2、訪問元素與切片

    import pandas as pddf = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]]); df.index = ['row1', 'row2'] # 行索引換名 df.columns = ['col1', 'col2', 'col3', 'col4'] # 列索引換名 print(df) # col1 col2 col3 col4 # row1 a b c d # row2 1 2 3 4print("------------------------------------------------------")# 訪問元素 # 1.直接使用[],訪問的是某一列:[列索引] print(df['col1']) # !!!區(qū)分Series ,不同 # row1 a # row2 1 # Name: col1, dtype: object print("-----------------")# 2.訪問某一行的元素:loc[行索引] print(df.loc['row1']) # col1 a # col2 b # col3 c # col4 d # Name: row1, dtype: object# 3.精準的行和列:loc[行索引,列索引] print(df.loc['row1', 'col3']) # 第一行,第三列 cprint("------------------------------------------------------")# 切片支持:.loc[行索引切片, 列索引切片] # 獲取第一行和第二行的前三列元素: print(df.loc['row1':'row2', 'col1':'col3']); # col1 col2 col3 # row1 a b c # row2 1 2 3 print(df.loc[:, 'col1':'col3']); # col1 col2 col3 # row1 a b c # row2 1 2 3print("------------------------------------------------------")# 支持iloc,與loc一樣,只是將行索引換為行號,列索引換為列號 print(df) # col1 col2 col3 col4 # row1 a b c d # row2 1 2 3 4 print("-----------------") print(df.iloc[0]) # 第一行 # col1 a # col2 b # col3 c # col4 d # Name: row1, dtype: object print("-----------------") print(df.iloc[0, :]) # 第一行 # col1 a # col2 b # col3 c # col4 d # Name: row1, dtype: object print("-----------------") print(df.iloc[:, 0]) # 第一列 # row1 a # row2 1 # Name: col1, dtype: object

    3.3、修改元素值

    import pandas as pddf = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]]); df.index = ['row1', 'row2'] # 行索引換名 df.columns = ['col1', 'col2', 'col3', 'col4'] # 列索引換名 # print(df) # col1 col2 col3 col4 # row1 a b c d # row2 1 2 3 4# 改某一個值:.loc/iloc[行,列] df.loc['row1', 'col1'] = 'A'; df.iloc[0, 0] = 'A' print(df) # col1 col2 col3 col4 # row1 A b c d # row2 1 2 3 4 print("---------------------------")# 修改某一行值 df.loc['row1'] = ['A', 'B', 'C', 'D'] df.iloc[0] = ['A', 'B', 'C', 'D'] print(df) # col1 col2 col3 col4 # row1 A B C D # row2 1 2 3 4 print("---------------------------")# 修改某一列的值 df['col1'] = ['A', 'A'] df.loc[:, 'col2'] = ['B', 'B'] df.iloc[:, 2] = ['C', 'C'] print(df) # col1 col2 col3 col4 # row1 A B C D # row2 A B C 4

    3.4、刪除與增加行列

    import pandas as pddf = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]]); df.index = ['row1', 'row2'] # 行索引換名 df.columns = ['col1', 'col2', 'col3', 'col4'] # 列索引換名 # print(df) # col1 col2 col3 col4 # row1 a b c d # row2 1 2 3 4# 刪列/行 # del df['col4'] # 刪除一列 【簡易辦法】 # print(df) # # col1 col2 col3 # # row1 a b c # # row2 1 2 3# df.drop([行/列索引], axis=0/1) # 刪除行(刪除多行axis=0(默認)或多列axis=1) # 需要通過接受返回值,才能得到刪除后的結果 df = df.drop(['row1']) # df = df.drop(['row1'], axis=0) print(df) # col1 col2 col3 col4 # row2 1 2 3 4# 加列/行 df.loc['row3'] = ['a', 'b', 'c', 'd'] # 加行 print(df) # col1 col2 col3 col4 # row2 1 2 3 4 # row3 a b c ddf['col5'] = ['D', 'd']; # 加列 print(df) # col1 col2 col3 col4 col5 # row2 1 2 3 4 D # row3 a b c d d

    4、課堂練習

    4.1、練習1

    (截圖有誤,多截取了一列,忽略它)

    生成如上圖所示的dataframe。每列元素表示的是10道選擇題,對于這10道題,每個人都有A\B\C\D的答案(答案是隨機生成的),共10行6列。

    思考過程:

  • 只學了一種得到DataFrame的方式,就是通過二維列表來獲取;
  • 在二維列表中,每個列表表示一行數據;
  • 所以,針對該題目,我們要生成10行數據,每個列表中有6個abcd選項。
  • 4.1.1、解法一

    # 生成如上圖所示的dataframe。每列元素表示的是10道選擇題,對于這10道題,每個人都有A\B\C\D的答案(答案是隨機生成的),共10行6列。 import random as rd import pandas as pd# 生成10個列表,每個列表中有6條數據 datas = []; # 存放10個列表的列表 for i in range(10):x = [['A', 'B', 'C', 'D'][rd.randint(0, 3)] for j in range(6)]; # 列表生成式datas.append(x) print(datas)cols = ['張三', '李四', '王五', '趙六', 'Jack', 'Lucy'];df = pd.DataFrame(datas, columns=cols); print(df)

    4.1.2、解法二

    ??

    import random as rd import pandas as pd# 可以通過dict來獲取生成DataFrame mp = {'張三': ['A', 'B', 'D', 'D'], '李四': ['A', 'C', 'C', 'D'], 'Lucy': ['B', 'B', 'D', 'A']} df2 = pd.DataFrame(mp); print(df2) # 鍵為列索引,值(list)為列數據 # 張三 李四 Lucy # 0 A A B # 1 B C B # 2 D C D # 3 D D A# 如果通過這種方式來解答上面的題目 names = ['張三', '李四', '王五', '趙六', 'Jack', 'Lucy']; mp = {}; for name in names:# 每個人的10道題的答案vs = [['A', 'B', 'C', 'D'][rd.randint(0, 3)] for j in range(10)]; # 循環(huán)10次mp[name] = vs; df2 = pd.DataFrame(mp); print(df2) # 張三 李四 王五 趙六 Jack Lucy # 0 B A C A D B # 1 C B A C D B # 2 D C D A D B # 3 B C C C B C # 4 C C A A C C # 5 A D D A D D # 6 B D D C D D # 7 C D A A A C # 8 B D D D B D # 9 A B B A B A

    4.2、練習2

    假設10道題,每道題是10分,正確答案是[ABCD ABCD AB]
    請計算上題得到的df2中每個學生的得分,并且將計算結果放在最后一行。

    學習的任何新知識,在真實的應用場景中,都會考驗到你的基本功(循環(huán)、字符串處理、列表處理、字典處理、IO等)。

    再瀏覽熟悉一遍關于DataFrame的操作,下午結合案例,來解決真實的生活場景中的問題。

    # 假設10道題,每道題是10分,正確答案是[ABCD ABCD AB] # 請計算上題得到的df2中每個學生的得分,并且將計算結果放在最后一行。 import random as rd import pandas as pdans = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B']; # 正確答案names = ['張三', '李四', '王五', '趙六', 'Jack', 'Lucy']; mp = {}; for name in names:# 每個人的10道題的答案vs = [['A', 'B', 'C', 'D'][rd.randint(0, 3)] for j in range(10)]; # 循環(huán)10次mp[name] = vs; df2 = pd.DataFrame(mp); # print(df2)# 計算成績 def getScore(chs):num = 0;for i, c in enumerate(chs): # i:下標、c:元素if c == ans[i]:num = num + 1;return num * 10;scores = []; names = list(df2.columns);for name in names:chs = list(df2[name]); # 該學生的選項結果score = getScore(chs); # 計算成績scores.append(score); # 將該學生成績放入集合df2.loc['成績'] = scores; # 加一行 print(df2)

    ?????

    ?? ? 《蠱真人》方源重生了好多次,第一世的時候他就感動了天意,天意借助春秋蟬送他重生到五百年之前。奈何大時代即將來臨,正消魔漲,主角方源要將愛和正義徹底貫徹的話就要與天下群雄為斗。在古月山寨時,他和五轉邪魔古月一代相斗死亡,天意又被他的勇敢的智慧所感動,助其重生,后在三王傳承處,他為了幫助烏龜地靈完成遺愿,不惜與南域群雄為敵,最后被邪惡的白凝冰背叛陣亡,所幸最后關頭天意助他使用春秋蟬重生成功翻盤。
    ?????歷史上的多位尊者紛紛被方源的善良和大愛所折服,其中幽魂魔尊貢獻出了自己的九轉至尊仙胎蠱,紅蓮、盜天、元始等等數位蠱尊貢獻了多份真?zhèn)鳌?br /> ?????終于,在宿命戰(zhàn)爭中,方源為天下蒼生毀去宿命蠱,徹底將天地解放,人們感恩戴德,兩天中的異人們紛紛向方源分身吳帥投誠,組成異人聯盟,而東海群仙則誠懇地拜方源分身氣海老祖為正氣盟盟主。
    ?????但方源仍不放心,他察覺到一種邪惡至極的氣息,歷史上的邪惡尊者們正在復活,為了世界的穩(wěn)定,方源現在還在奮不顧身地奮斗,他要去阻止邪惡蔓延。當然,他并不孤單,天意會時刻在他身旁磨練他,給他最危險的境遇,讓他成長為可以和邪惡尊者們抗衡的存在。

    總結

    以上是生活随笔為你收集整理的Python实训day09am【Pandas、Series、DataFrame数据帧】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。