<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          10 種創(chuàng)建 DataFrame 的方式,你知道幾個?

          共 12105字,需瀏覽 25分鐘

           ·

          2021-06-25 22:09


          DataFrame數(shù)據(jù)創(chuàng)建

          本文介紹如何創(chuàng)建 DataFrame,也是 pandas 中最常用的數(shù)據(jù)類型,必須掌握的,后續(xù)的所有連載文章幾乎都是基于DataFrame數(shù)據(jù)的操作。


          導(dǎo)入庫

          pandas 和 numpy 建議通過 anaconda 安裝后使用;pymysql 主要是 python 用來連接數(shù)據(jù)庫,然后進行庫表操作的第三方庫,也需要先安裝

          import numpy as np
          import pandas as pd
          from pandas import Series,DataFrame

          import pymysql   # 安裝:pip install pymysql

          10種方式創(chuàng)建 DataFrame

          下面介紹的是通過不同的方式來創(chuàng)建 DataFrame 數(shù)據(jù),所有方式最終使用的函數(shù)都是:pd.DataFrame()

          1、創(chuàng)建空 DataFrame

          2、創(chuàng)建數(shù)值為 NaN 的 DataFrame

          df0 = pd.DataFrame(
            columns=['A','B','C'], # 指定列屬性
            index=[0,1,2]  # 指定行索引


          df0

          改變數(shù)據(jù)的行索引:

          df0 = pd.DataFrame(
            columns=['A','B','C'], 
            index=[1,2,3]  # 改變行索引:從1開始
          )

          df0

          手動創(chuàng)建 DataFrame

          將每個列字段的數(shù)據(jù)通過列表的形式列出來

          df1 = pd.DataFrame({  
              "name":["小明","小紅","小侯","小周","小孫"],   
              "sex":["男","女","女","男","男"],
              "age":[20,19,28,27,24],
              "class":[1,2,2,1,2]
          })

          df1

          讀取本地文件創(chuàng)建

          pandas 可以通過讀取 Excel、CSV、JSON 等文件來創(chuàng)建 DataFrame 數(shù)據(jù)

          1、讀取 CSV 文件

          比如曾經(jīng)爬到的一份成都美食的數(shù)據(jù),是 CSV 格式的:

          df2 = pd.read_csv("成都美食.csv")   # 括號里面填寫文件的路徑:本文的文件在當(dāng)然目錄下
          df2

          2、讀取 Excel 文件

          如果是 Excel 文件,也可以進行讀?。?/p>

          df3 = pd.read_excel("成都美食.xlsx")
          df3.head()  # 默認顯示前5行數(shù)據(jù)

          3、讀取 json 文件

          比如本地當(dāng)前目錄下有一份 json 格式的數(shù)據(jù):

          通過 pandas 讀取進來:

          df4 = pd.read_json("information.json")
          df4

          4、讀取 TXT 文件

          本地當(dāng)前目錄有一個 TXT 文件,如下圖:

          df5 = pd.read_table("text.txt")
          df5

          上圖中如果不指定任何參數(shù):pandas 會將第一行數(shù)據(jù)作為列字段(不是我們想要的結(jié)果),指定參數(shù)修改后的代碼:

          df7 = pd.read_table(
            "text.txt",   # 文件路徑
            names=["姓名","年齡","性別","省份"],   # 指定列屬性
            sep=" "  # 指定分隔符:空格
          )

          df7

          另外的一種解決方法就是:直接修改 txt 文件,在最上面加上我們想要的列字段屬性:這樣最上面的一行數(shù)據(jù)便會當(dāng)做列字段

          姓名 年齡  性別 出生地
          小明  20   男  深圳
          小紅  19   女  廣州
          小孫  28   女  北京
          小周  25   男  上海
          小張  22   女  杭州

          讀取數(shù)據(jù)庫文件創(chuàng)建

          1、先安裝 pymysql

          本文中介紹的是通過 pymysql 庫來操作數(shù)據(jù)庫,然后將數(shù)據(jù)通過 pandas 讀取進來,首先要先安裝下 pymysql庫(假裝你會了):

          pip install pymysql

          首先看下本地數(shù)據(jù)庫中一個表中的數(shù)據(jù):讀取 Student 表中的全部數(shù)據(jù)

          數(shù)據(jù)真實樣子如下圖:

          2、建立連接

          connection = pymysql.connect(
              host="IP地址",
              port=端口號,
              user="用戶名",
              password="密碼",
              charset="字符集",
              db="庫名"
          )

          cur = connection.cursor()   # 建立游標(biāo)

          # 待執(zhí)行的SQL語句
          sql = """   
          select * from Student
          """


          # 執(zhí)行SQL
          cur.execute(sql)

          3、返回執(zhí)行的結(jié)果

          data = []

          for i in cur.fetchall():
              data.append(i)   # 將每條結(jié)果追加到列表中

          data

          4、創(chuàng)建成 DataFrame 數(shù)據(jù)

          df8 = pd.DataFrame(data,columns=["學(xué)號","姓名","出生年月","性別"])   # 指定每個列屬性名稱
          df8

          使用 python 字典創(chuàng)建

          1、包含列表的字典創(chuàng)建

          # 1、包含列表的字典

          dic1  = {"name":["小明","小紅","小孫"],  
                  "age":[20,18,27],
                  "sex":["男","女","男"]
                 }
          dic1
          df9 = pd.DataFrame(dic1,index=[0,1,2])
          df9

          2、字典中嵌套字典進行創(chuàng)建

          # 嵌套字典的字典

          dic2 = {'數(shù)量':{'蘋果':3,'梨':2,'草莓':5},
                 '價格':{'蘋果':10,'梨':9,'草莓':8},
                  '產(chǎn)地':{'蘋果':'陜西','梨':'山東','草莓':'廣東'}
                }

          dic2

          # 結(jié)果
          {'數(shù)量': {'蘋果'3'梨'2'草莓'5},
           '價格': {'蘋果'10'梨'9'草莓'8},
           '產(chǎn)地': {'蘋果''陜西''梨''山東''草莓''廣東'}}

          創(chuàng)建結(jié)果為:

          python 列表創(chuàng)建

          1、使用默認的行索引

          lst = ["小明","小紅","小周","小孫"]
          df10 = pd.DataFrame(lst,columns=["姓名"])
          df10

          可以對索引進行修改:

          lst = ["小明","小紅","小周","小孫"]

          df10 = pd.DataFrame(
            lst,
            columns=["姓名"],
            index=["a","b","c","d"]   # 修改索引
          )

          df10

          3、列表中嵌套列表

          # 嵌套列表形式

          lst = [["小明","20","男"],
                 ["小紅","23","女"],
                 ["小周","19","男"],
                 ["小孫","28","男"]
                ]

          df11 = pd.DataFrame(lst,columns=["姓名","年齡","性別"])
          df11

          python 元組創(chuàng)建

          元組創(chuàng)建的方式和列表比較類似:可以是單層元組,也可以進行嵌套。

          1、單層元組創(chuàng)建

          # 單層元組

          tup = ("小明","小紅","小周","小孫")
          df12 = pd.DataFrame(tup,columns=["姓名"])

          df12

          2、元組的嵌套

          # 嵌套元組

          tup = (("小明","20","男"),
                 ("小紅","23","女"),
                 ("小周","19","男"),
                 ("小孫","28","男")
                )

          df13 = pd.DataFrame(tup,columns=["姓名","年齡","性別"])
          df13

          使用 Series 創(chuàng)建

          DataFrame 是將數(shù)個 Series 按列合并而成的二維數(shù)據(jù)結(jié)構(gòu),每一列單獨取出來是一個 Series ,所以我們可以直接通過Series數(shù)據(jù)進行創(chuàng)建。

          series = {'水果':Series(['蘋果','梨','草莓']),
                    '數(shù)量':Series([60,50,100]),
                    '價格':Series([7,5,18])
                   }

          df15 = pd.DataFrame(series)
          df15

          numpy 數(shù)組創(chuàng)建

          1、使用 numpy 中的函數(shù)進行創(chuàng)建

          # 1、使用numpy生成的數(shù)組

          data1 = {
              "one":np.arange(4,10),  # 產(chǎn)生6個數(shù)據(jù)
              "two":range(100,106),
              "three":range(20,26)


          df16 = pd.DataFrame(
            data1,
            index=['A','B','C','D','E','F']   # 索引長度和數(shù)據(jù)長度相同
          )

          df16

          2、直接通過 numpy 數(shù)組創(chuàng)建

          # 2、numpy數(shù)組創(chuàng)建

          # reshape()函數(shù)改變數(shù)組的shape值
          data2 = np.array(["小明","廣州",175,"小紅","深圳",165,"小周","北京",170,"小孫","上海",180]).reshape(4,3)

          data2
          df17 = pd.DataFrame(
            data2,   # 傳入數(shù)據(jù)
            columns=["姓名","出生地","身高"],  # 列屬性
            index=[0,1,2,3]  # 行索引
          )

          df17

          3、使用 numpy 中的隨機函數(shù)

          # 3、numpy中的隨機函數(shù)生成

          # 創(chuàng)建姓名、學(xué)科、學(xué)期、班級4個列表
          name_list = ["小明","小紅","小孫","小周","小張"]
          subject_list = ["語文","數(shù)學(xué)","英文","生物","物理","地理","化學(xué)","體育"]
          semester_list = ["上","下"]
          class_list = [1,2,3]

          # 生成40個分數(shù):在50-100之間
          score_list = np.random.randint(50,100,40).tolist()   # 50-100之間選擇40個數(shù)

          隨機生成的 40 個分數(shù):

          通過 numpy 中的 random 模塊的 choice 方法進行數(shù)據(jù)的隨機生成:

          df18 = pd.DataFrame({
              "name": np.random.choice(name_list,40,replace=True),   # replace=True表示抽取后放回(默認),所以存在相同值
              "subject": np.random.choice(subject_list,40),
              "semester": np.random.choice(semester_list,40),
              "class":np.random.choice(class_list,40),
              "score": score_list
          })

          df18

          使用構(gòu)建器 from_dict

          pandas中有一個和字典相關(guān)的構(gòu)建器:DataFrame.from_dict 。

          它接收字典組成的字典或數(shù)組序列字典,并生成 DataFrame。除了 orient 參數(shù)默認為 columns,本構(gòu)建器的操作與 DataFrame 構(gòu)建器類似。把 orient 參數(shù)設(shè)置為 'index', 即可把字典的鍵作為行標(biāo)簽。

          df19 = pd.DataFrame.from_dict(dict([('姓名', ['小明''小紅''小周']), 
                                              ('身高', [178165196]),
                                              ('性別',['男','女','男']),
                                              ('出生地',['深圳','上海','北京'])                                  
                                             ])
                                       )

          df19

          還可以通過參數(shù)指定行索引和列字段名稱:

          df20 = pd.DataFrame.from_dict(dict([('姓名', ['小明''小紅''小周']), 
                                              ('身高', [178165196]),
                                              ('性別',['男','女','男']),
                                              ('出生地',['深圳','上海','北京'])                                  
                                             ]),
                                        orient='index',   # 將字典的鍵作為行索引
                                        columns=['one''two''three']  # 指定列字段名稱
                                       )

          df20

          使用構(gòu)建器 from_records

          pandas中還有另一個支持元組列表或結(jié)構(gòu)數(shù)據(jù)類型(dtype)的多維數(shù)組的構(gòu)建器:from_records

          data3 = [{'身高'173'姓名''張三','性別':'男'},
                  {'身高'182'姓名''李四','性別':'男'},
                  {'身高'165'姓名''王五','性別':'女'},
                  {'身高'170'姓名''小明','性別':'女'}]

          df21 = pd.DataFrame.from_records(data3)

          df21

          還可以傳入列表中嵌套元組的結(jié)構(gòu)型數(shù)據(jù):

          data4 = [(173'小明''男'), 
                   (182'小紅''女'), 
                   (161'小周''女'), 
                   (170'小強''男')
                  ]

          df22 = pd.DataFrame.from_records(data4, 
                                           columns=['身高''姓名''性別']
                                          )

          df22

          總結(jié)

          DataFrame 是 pandas 中的二維數(shù)據(jù)結(jié)構(gòu),即數(shù)據(jù)以行和列的表格方式排列,類似于 Excel 、SQL 表,或 Series 對象構(gòu)成的字典。它在 pandas 中是經(jīng)常使用,本身就是多個 Series 類型數(shù)據(jù)的合并。

          本文介紹了10 種不同的方式創(chuàng)建 DataFrame,最為常見的是通過讀取文件的方式進行創(chuàng)建,然后對數(shù)據(jù)幀進行處理和分析。希望本文能夠?qū)ψx者朋友掌握數(shù)據(jù)幀 DataFrame 的創(chuàng)建有所幫助。

          瀏覽 517
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看逼逼 | 特黄A级毛片 | 欧美在线观看爆操 | 噜噜吧噜噜久久综合 | 色墦五月丁香 |