Pandas的學習(3.DataFrame的創建方法和三種索引方法(iloc、loc、values)以及切片)

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

【注意】 直接用中括號時:
             ---索引表示的是列索引
             ----切片表示的是行切片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章