DataFrame的索引和基本操作


一、DataFrame的索引

1,選擇列

 1 import pandas as pd
 2 import numpy as np
 3 from pandas import Series, DataFrame
 4 
 5 df = DataFrame(np.random.rand(12).reshape((3,4)),
 6               index = ['one', 'two', 'three'],
 7               columns= list('abcd')
 8               )
 9 print(df)
10 type(df['a'])
11 df[['a','c']]  # dataframe

 

 

 注:df[ ]--選擇列,整數可以選擇行,但是不能單獨選擇,要用切片的方式如df[:2]

2,選擇行

df1 = DataFrame(np.random.rand(12).reshape((3,4)),
                index = [3,2,1],
              columns= list('abcd')
              )
print(df1)
df.loc['one']   # 單獨的行,返回的也是一個Series對象
# df1.loc[0]  # 整數的索引,只能是index 是默認的整數時
df.loc[['one','three','four']]  # 多行,返回的也是一個Dataframe對象
df1.loc[2:1]
# df.loc['two':'three']  # index 標簽切片,閉區間
# df.loc[label] 主要是針對行索引,同時指出指定index,及默認的index

 

 

 

 

 

 注:df.loc[ ]--按index選擇行,字符串標簽索引

3,另外一種索引方法

df.iloc[] 按照整數位置(從0到length-1)選擇行
類似於list的索引,順序就是dataframe的整數位置,從0開始算

1 print(df)
2 df.iloc[0]  # 一行
3 # df.iloc[3] 不能超出索引的范圍
4 df.iloc[[0,1]]  # 選擇多行,返回dataframe對象
5 
6 df.iloc[[1,0]] # 選擇的多行,順序可變
7 df.iloc[::2]

4,布爾型索引

原理和Series原理相同

 1 # df = df/10000
 2 print(df)
 3 b1 = df < 20    # 返回一個和df形狀相同的布爾型 dataframe
 4 df[b1]  # 返回一個dataframe,所有數據,True返回原數據,False 返回NaN
 5 
 6 b2 = df['a'] > 50  # 單列,就是Series
 7 # print(b2, type(b2))
 8 df[b2]  # 單列做判斷,保留判斷為True的行數據
 9 
10 # 多列做判斷
11 b3 = df[['a', 'b']] > 50  #  返回一個布爾型的dataframe
12 print(b3)
13 print(df[b3])  # 返回形狀相同的dataframe 為True位置返回數據,False和其他位置都返回NaN

5,多重索引,同時索引列和行

1 print(df)
2 df['a'].loc[['one','three']]
3 df[['b', 'c', 'd']].iloc[::2]
4 df[df['a']<50].iloc[0]

二、DataFrame的基本操作

1,數據查看和轉置

1 df = DataFrame(np.random.rand(16).reshape((4,4)))
2 df.head(2)
3 df.tail()
4 # .T
5 print(df)
6 print(df.T)

 

 

 2,添加和修改

1 df.columns = list('abcd')
2 df['e'] = 10   #  指定添加一列,標量重復
3 df

1 # 添加一行,df數據同上
2 df.loc[4]=5
3 print(df)

1 # 修改,df數據同上
2 df['e'] = 0
3 print(df)

1 # 修改多列,df數據同上
2 df[['d','e']] = 88
3 print(df)
4 # 直接索引賦值

 

 

 3,刪除

1 # 刪除一列  del  df數據同上
2 del df['e']
3 print(df)

1 # 刪除的第二種方法
2 df.drop(0)   # drop 默認會返回刪除后的datafarme

1 # drop()  axis=0 刪除行 axis=1 刪除列
2 df.drop('a', axis=1)

1 # drop 默認會返回一個新的值,設置 inplace=True修改原數據
2 df.drop(0,inplace=True)
3 df

4,對齊

1 df = DataFrame(np.arange(16).reshape((4,4)), columns=list('abcd'))
2 df1 = DataFrame(np.arange(9).reshape((3,3)), columns=list('cba'))
3 print(df)
4 print(df1)
5 # 按照行和列的標簽自動對齊
6 df+df1

 

 

 

 

 

 5,排序

1 df = DataFrame(np.random.randint(16,size=[4,4]), columns=list('abcd'))
2 df
3 # 按值排序
4 df.sort_values('b', ascending=False)  # 按照列標簽等於b的那一列的值進行排序,默認從小到大 ascending=True 默認,False降序
5 
6 df.sort_values(['b','c'])  # 聯合

 

 

  

1 # 默認axis=0 ,就是要用列的值,去對行進行排序,所以第一個參數需要傳入 列索引
2 # axis=1 ,就是用行的值,去對列進行排序,傳入行索引
3 df.sort_values(2, axis=1)

 

 

1 # 按索引排序
2 df.index = [5,2,4,1]
3 df.columns = list('adce')
4 print(df)
5 
6 df.sort_index(ascending=False)  # 默認按行索引進行降序  ascending=False 降序
7 # axis=1 按列索引排序
8 df.sort_index(axis=1)

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM