10 種創建 DataFrame 的方式,你知道幾個?

2021-12-23 Python大咖談
DataFrame數據創建

本文介紹如何創建 DataFrame,也是 pandas 中最常用的數據類型,必須掌握的,後續的所有連載文章幾乎都是基於DataFrame數據的操作。


導入庫

pandas 和 numpy 建議通過 anaconda 安裝後使用;pymysql 主要是 python 用來連接資料庫,然後進行庫表操作的第三方庫,也需要先安裝

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

import pymysql   # 安裝:pip install pymysql

10種方式創建 DataFrame

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

1、創建空 DataFrame

2、創建數值為 NaN 的 DataFrame

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


df0

改變數據的行索引:

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

df0

手動創建 DataFrame

將每個列欄位的數據通過列表的形式列出來

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

df1

讀取本地文件創建

pandas 可以通過讀取 Excel、CSV、JSON 等文件來創建 DataFrame 數據

1、讀取 CSV 文件

比如曾經爬到的一份成都美食的數據,是 CSV 格式的:

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

2、讀取 Excel 文件

如果是 Excel 文件,也可以進行讀取:

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

3、讀取 json 文件

比如本地當前目錄下有一份 json 格式的數據:

通過 pandas 讀取進來:

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

4、讀取 TXT 文件

本地當前目錄有一個 TXT 文件,如下圖:

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

上圖中如果不指定任何參數:pandas 會將第一行數據作為列欄位(不是我們想要的結果),指定參數修改後的代碼:

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

df7

另外的一種解決方法就是:直接修改 txt 文件,在最上面加上我們想要的列欄位屬性:這樣最上面的一行數據便會當做列欄位

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

讀取資料庫文件創建

1、先安裝 pymysql

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

pip install pymysql

首先看下本地資料庫中一個表中的數據:讀取 Student 表中的全部數據

數據真實樣子如下圖:

2、建立連接

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

cur = connection.cursor()   # 建立遊標

# 待執行的SQL語句
sql = """   
select * from Student
"""

# 執行SQL
cur.execute(sql)

3、返回執行的結果

data = []

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

data

4、創建成 DataFrame 數據

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

使用 python 字典創建

1、包含列表的字典創建

# 1、包含列表的字典

dic1  = {"name":["小明","小紅","小孫"],  
        "age":[20,18,27],
        "sex":["男","女","男"]
       }
dic1

df9 = pd.DataFrame(dic1,index=[0,1,2])
df9

2、字典中嵌套字典進行創建

# 嵌套字典的字典

dic2 = {'數量':{'蘋果':3,'梨':2,'草莓':5},
       '價格':{'蘋果':10,'梨':9,'草莓':8},
        '產地':{'蘋果':'陝西','梨':'山東','草莓':'廣東'}
      }

dic2

# 結果
{'數量': {'蘋果': 3, '梨': 2, '草莓': 5},
 '價格': {'蘋果': 10, '梨': 9, '草莓': 8},
 '產地': {'蘋果': '陝西', '梨': '山東', '草莓': '廣東'}}

創建結果為:

python 列表創建

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 元組創建

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

1、單層元組創建

# 單層元組

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

df12

2、元組的嵌套

# 嵌套元組

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

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

使用 Series 創建

DataFrame 是將數個 Series 按列合併而成的二維數據結構,每一列單獨取出來是一個 Series ,所以我們可以直接通過Series數據進行創建。

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

df15 = pd.DataFrame(series)
df15

numpy 數組創建

1、使用 numpy 中的函數進行創建

# 1、使用numpy生成的數組

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


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

df16

2、直接通過 numpy 數組創建

# 2、numpy數組創建

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

data2

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

df17

3、使用 numpy 中的隨機函數

# 3、numpy中的隨機函數生成

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

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

隨機生成的 40 個分數:

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

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

使用構建器 from_dict

pandas中有一個和字典相關的構建器:DataFrame.from_dict 。

它接收字典組成的字典或數組序列字典,並生成 DataFrame。除了 orient 參數默認為 columns,本構建器的操作與 DataFrame 構建器類似。把 orient 參數設置為 'index', 即可把字典的鍵作為行標籤。

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

df19

還可以通過參數指定行索引和列欄位名稱:

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

df20

使用構建器 from_records

pandas中還有另一個支持元組列表或結構數據類型(dtype)的多維數組的構建器:from_records

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

df21 = pd.DataFrame.from_records(data3)

df21

還可以傳入列表中嵌套元組的結構型數據:

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

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

df22

總結

DataFrame 是 pandas 中的二維數據結構,即數據以行和列的表格方式排列,類似於 Excel 、SQL 表,或 Series 對象構成的字典。它在 pandas 中是經常使用,本身就是多個 Series 類型數據的合併。

本文介紹了10 種不同的方式創建 DataFrame,最為常見的是通過讀取文件的方式進行創建,然後對數據幀進行處理和分析。希望本文能夠對讀者朋友掌握數據幀 DataFrame 的創建有所幫助。

相關焦點

  • DataFrame(3):DataFrame的創建方式
    1、利用字典生成DataFrame① 第一種方式:列表組成的字典stu = {       "name":["張三","李四","王燕"],       "age":[18,20,22],       "sex":["男","男","女"]}df = pd.DataFrame(stu)display
  • 三種方式創建DataFrame
    DataFrame方式1.字典創建import pandas as pddata = {"a" : [4 ,5, 6],         "b" : [7, 8, 9],         "c" : [10, 11, 12]}df = pd.DataFrame(data)df2.
  • DataFrame(4):DataFrame的創建方式
    1、利用字典生成DataFrame① 第一種方式
  • Pandas數據處理(一)--創建DataFrame及Numpy基礎操作
    收錄於話題 #Pandas數據分析 6個
  • 數據分析利器 pandas 系列教程(二):強大的 DataFrame
    創建 dataframe 的常見方式同 series 一樣,dataframe 也有 index,不同的是,series 除了 index,只有一列,而 dataframe 通常有很多列,比如上面的 dataframe 就有四列,而且都有名字:name、sex、course、grade,通過這些名字,可以索引到某一列,這些名字稱為列(索引),因此,在 dataframe
  • R語言精要-Dataframe篇·上
    #創建一個dataframeid <- 1:6age <- c(10, 20, 30, 40, 50, 45)gender <- rep(c("Female", "Male"), each = 3)height <- c(1, 1.7, 1.6, 1.8, 1.7, 1.6)mydata <- data.frame(id,
  • 什麼是Pandas的DataFrame?
    創建DataFrame最常用的一種是直接傳入一個由等長列表或NumPy數組組成的字典:In [33]: data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9
  • Pandas-DataFrame基礎知識點總結
    DataFrame的創建有多種方式,不過最重要的還是根據dict進行創建,以及讀取csv或者txt文件來創建。這裡主要介紹這兩種方式。根據字典創建data = {    'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],    'year':[2000,2001,2002,2001,2002],    'pop':[1.5,1.7,3.6,2.4,2.9]}frame = pd.DataFrame(data)frame#輸出    pop state
  • Pandas常用的兩種數據類型之「DataFrame」
    1.創建方式我可以使用如下的方式創建(初始化)DataFrame類型的對象(常用):•二維數組結構(列表,ndarray數組,DataFrame等)類型。•字典類型,key為列名,value為一維數組結構(列表,ndarray數組,Series等)。•如果沒有顯式指定行與列索引,則會自動生成以0開始的整數值索引。
  • python:數據結構之dataframe
    Dataframe1、什麼是dataframe對象DataFrame是pandas庫中最常用的數據類型,是一種存放數據的容器,dataframe
  • Pandas常用數據結構DataFrame詳細教程
    一、創建 由數組/list組成的字典創建Dataframe,columns為字典key,index為默認數字標籤,字典的值的長度必須保持一致 通過二維數組直接創建Dataframe,得到一樣形狀的結果數據,如果不指定index和columns,兩者均返回默認數字格式index和colunms指定長度與原數組保持一致
  • 直接保存 DataFrame 表格到本地,這個「騷操作」你還不知道?
    保存圖片,你可能用的多。但是保存這個表格,你估計就不一定知道了。為什麼需要將df_new保存在本地呢?其實提問者是為了將表格保存在本地,後面需要完成自動化群發消息的操作,這樣一來,你不僅僅可以發圖片,現在還可以發表格了,是不是很舒服?那麼,這樣一個操作,應該怎麼完成呢?下面我為大家慢慢講述。
  • dataframe基礎操作
    先上一下我們的示例數據:library(dplyr)>gset = eset2[1:4,1:4] %>% as.data.frame()>gset GSM387788 GSM387789 GSM387790 GSM387791DDR1 2846.2456 4195.5971
  • array, list, tensor,Dataframe,Series之間互相轉換總結
    Dataframe創建的方式有很多種,這裡不贅述了。以下舉個例子,因為我們這裡要講的是和array等的轉換,這裡全都用數字型的元素。對於dataframe來說,我們列印出來,結構類似於一個二維矩陣格式,只是每一列和每一個行都有個index,這並且這些結構之間有很多方便的操作,在讀入結構化數據的時候尤為方便,所以平時做偏結構化數據的時候, 比如excel、pickle等等,pandas的使用是繞不開的。
  • 數據集的「乾坤大挪移」:如何使pandas.Dataframe從行式到列式?
    有很多種方法可以做到這一點,但pandas的melt()方法是其中最靈活的一種,你只需要學好這種就足夠了。本文將傳授給你數據集的「乾坤大挪移」大法,使用pd.melt()或melt方法使pandas. dataframe發生形變。一起來看看吧!行式vs寬式數據集如果我們將一個行式數據集與列式數據集進行比較,最容易理解行式數據集是什麼樣?
  • R語言基本功:vector,factor,list,matrix以及dataframe
    今天介紹R語言的幾個核心概念:vector,factor,list, matrix與dataframe。R語言中的vector主要包含三種類型,如數值型,字符型,邏輯型。舉個例子,創建一個變量gender,0代表男性,1代表女性: gender <- c(1, 0, 1, 1, 1, 0)但目前為止,gender在R中的儲存形式為數值型的vector,需轉化為factor(分類變量): gender <- factor(gender)gender
  • Pandas數據結構:DataFrame
    , 18],"city": ["BeiJing", "TianJin", "ShenZhen"]}print(data)print("")frame = pd.DataFrame(data) # 創建DataFrame
  • R語言 | 數據框data.frame操作一網打盡
    創建數據框2. 行名列名等屬性3. 獲取元素(遍歷)4. 修改(增刪改、轉置、melt)5. 連接數據框、拆分數據框6. 數據框的計算,按某列求平均值 (數據透視表)數據框(data.frame)在R中使用的十分廣泛。只要你用read.table輸入數據,基本都是data.frame類別的數據。
  • 【串講總結】array, list, tensor,Dataframe,Series之間互相轉換總結
    Dataframe創建的方式有很多種,這裡不贅述了。以下舉個例子,因為我們這裡要講的是和array等的轉換,這裡全都用數字型的元素。對於dataframe來說,我們列印出來,結構類似於一個二維矩陣格式,只是每一列和每一個行都有個index,這並且這些結構之間有很多方便的操作,在讀入結構化數據的時候尤為方便,所以平時做偏結構化數據的時候, 比如excel、pickle等等,pandas的使用是繞不開的。
  • 【深度學習】array, list, tensor,Dataframe,Series之間互相轉換總結
    Dataframe創建的方式有很多種,這裡不贅述了。以下舉個例子,因為我們這裡要講的是和array等的轉換,這裡全都用數字型的元素。對於dataframe來說,我們列印出來,結構類似於一個二維矩陣格式,只是每一列和每一個行都有個index,這並且這些結構之間有很多方便的操作,在讀入結構化數據的時候尤為方便,所以平時做偏結構化數據的時候, 比如excel、pickle等等,pandas的使用是繞不開的。