DataFrame
DataFrame是一個【表格型】的數據結構,可以看做是【由Series組成的字典】(共用同一個索引)。DataFrame由按一定順序排列的多列數據組成,設計初衷是將Series的使用場景從一維拓展到多維。DataFrame既有行索引,也有列索引、
--- 行索引: index
--- 列索引: columns
--- 值: values(numpy的二維數組)
DataFrame的創建
1. 最常用的方法是傳遞一個字典來創建。
DataFrame以字典的鍵作爲每一【列】的名稱,以字典的值(一個數組)作爲每一列。
此外,DataFrame會自動加上每一行的索引(和Series一樣)。
同Series一樣,若傳入的列與字典的鍵不匹配,則相應的值爲NaN。from pandas import DataFrame import numpy as np '''通過字典進行創建''' dic = { "height": [175, 180, 169, 177], "age": np.random.randint(18, 25, size=4), "sex": ['女', '男', '女', '男'] } """ DataFrame(data=None, index=None, columns=None, dtype=None,copy=False) 參數解釋: data: 爲創建數據的字典 index : 不賦值的時,行索引就是從0開始的整數 賦值給一個列表,列表的元素即爲行索引 columns : 不賦值時,列名就是字典中鍵 賦值給一個列表,列名就是列表中的元素, 如果元素比字典的鍵多的話,這一列的就爲NaN """ # columns中如果元素比字典的鍵多的話,這一列的就爲NaN df = DataFrame(dic, index=list('ABCD'), columns=['height', 'age', 'sex', 'weight']) print(df) """ height age sex weight A 175 18 女 NaN B 180 20 男 NaN C 169 19 女 NaN D 177 23 男 NaN """
2. 打印DataFrame的形狀 .shape
# 打印DataFrame的形狀 print(df.shape) """ (4, 4) """
3.給DataFramed的行索引重新賦值 .index
# 重新給DataFrame的行索引賦值 df.index = [1, 2, 3, 4] print(df) """ height age sex weight 1 175 22 女 NaN 2 180 23 男 NaN 3 169 22 女 NaN 4 177 21 男 NaN """
4. 修改DataFrame的列名(給DataFrame的列名重新賦值)
# 修改DataFrame的列名 df.columns = [0, 2, 4, 6] print(df) """ 0 2 4 6 1 175 24 女 NaN 2 180 23 男 NaN 3 169 21 女 NaN 4 177 22 男 NaN """
DataFrame的索引
1.對列進行索引
- 通過類似字典的方式
- 通過屬性的方式
可以將DataFrame的列獲取爲一個Series。返回的Series擁有原DataFrame相同的索引,且name屬性也已經設置好了,就是相應的列名。
# 通過字典的形式進行檢索 【檢索列返回值,是Series類型】 print(df['age']) """ A 20 B 20 C 18 D 22 Name: age, dtype: int3 """ # 通過屬性的方式進行檢索 # 對於DataFrame而言,列名就相當於屬性 # DataFrame 是統計數據時,用的表格,某一個事物屬性,每一個屬性對應的DataFran中的列名 print(df.age) """ A 21 B 22 C 18 D 21 Name: age, dtype: int32 """
2.對行進行索引
-- 使用.ix[]來進行行索引 (過時)
-- 使用.loc[]加index來進行行索引-- 使用.iloc[]加整數來進行行索引
同樣返回一個Series,index爲原來的
# 行索引 '''顯示索引''' # 對於行的檢索,返回值也爲Series print(df.loc['A']) """ Name: age, dtype: int32 height 175 age 19 sex 女 weight 55 Name: A, dtype: object """ # 中括號括起來,代表的是條件, 即檢索多行,返回的數據就是DataFrame print(df.loc[['A', 'B']]) """ height age sex weight A 175 24 女 55 B 180 21 男 78 """ ''' 對於切片而言沒有列切片(因爲列是屬性 ) ''' # 可以進行切片索引,左閉右閉 print(df.loc['A':'C']) """ height age sex weight A 175 21 女 55 B 180 20 男 78 C 169 19 女 71 """ '''隱式索引(左閉右開)''' # DataFrame自身有Bug,索引是漢字,有時無法檢索結果 print(df.iloc[1:3]) """ height age sex weight B 180 18 男 78 C 169 19 女 71 """
3.對元素索引的方法 (查詢到具體的數據)
-- 使用列索引
-- 使用行索引 (iloc[3,1]) 相當於兩個參數; iloc[[3,3]] 裏面的[3,3] 看做一個參數
-- 使用values屬性 (二維numpy數組)
'''對元素進行索引''' # 查詢到具體額數據 # 找到 列名爲sex的,行索引爲B的數據 print(df['sex']['B']) # 男 # 可以直接修改具體的值 (再進行修改值的時候,會拋出一個警告,讓我們去copy一份, # 根據具體的情況可以忽略,程序是可以正常執行的) df['sex']['B'] = '女博士' print(df) """ height age sex weight A 175 22 女 55 B 180 20 女博士 78 C 169 18 女 71 D 177 23 男 98 """ '''使用loc取出具體的元素''' # 檢索行的時候,參數可以多個,但是列,無法完成這樣的操作 print(df.loc['C']['height']) # 169 print(df.loc['C', 'height']) # 169 '''可以使用values取出某個數據''' # 使用values取出第一行的第三個(從0開始,左閉右閉) print(df.values[0,2]) # 55
【注意】 直接用中括號時:
---索引表示的是列索引
----切片表示的是行切片