Pandas切片

在刚开始使用pandas DataFrame的时候,对于数据的选取,修改和切片经常困惑,这里总结了一些常用的操作。

先初始化一个DateFrame做例子

[python]  view plain  copy
  1. import numpy as np  
  2. import pandas as pd  
  3. df = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age']) 
df是这样的
[python]  view plain  copy
  1. In [35]: df  
  2. Out[35]:   
  3.      name    gender  age  
  4. 0    Snow     M       22  
  5. 1    Tyrion   M       32  
  6. 2    Sansa    F       18  
  7. 3    Arya     F       14 
如果每列都有column name,比如这里是: 
[python]  view plain  copy
  1. In [42]: df.columns  
  2. Out[42]: Index(['name''gender''age'], dtype='object')  

1. df['column_name'] ,df[row_start_index, row_end_index] 选取指定整列数据

[python]  view plain  copy
  1. df['name']  
  2. df['gender']  
  3. df[['name','gender']] #选取多列,多列名字要放在list里  
  4. df[0:]  #第0行及之后的行,相当于df的全部数据,注意冒号是必须的  
  5. df[:2]  #第2行之前的数据(不含第2行)  
  6. df[0:1#第0行  
  7. df[1:3#第1行到第2行(不含第3行)  
  8. df[-1:] #最后一行  
  9. df[-3:-1#倒数第3行到倒数第1行(不包含最后1行即倒数第1行,这里有点烦躁,因为从前数时从第0行开始,从后数就是-1行开始,毕竟没有-0)  

2. loc,在知道列名字的情况下,df.loc[index,column] 选取指定行,列的数据

[python]  view plain  copy
  1. # df.loc[index, column_name],选取指定行和列的数据  
  2. df.loc[0,'name'# 'Snow'  
  3. df.loc[0:2, ['name','age']]          #选取第0行到第2行,name列和age列的数据, 注意这里的行选取是包含下标的。  
  4. df.loc[[2,3],['name','age']]         #选取指定的第2行和第3行,name和age列的数据  
  5. df.loc[df['gender']=='M','name']     #选取gender列是M,name列的数据  
  6. df.loc[df['gender']=='M',['name','age']] #选取gender列是M,name和age列的数据  

3. iloc,在column name特别长或者index是时间序列等各种不方便输入的情况下,可以用iloc (i = index), iloc完全用数字来定位 iloc[row_index, column_index]

[python]  view plain  copy
  1. df.iloc[0,0]        #第0行第0列的数据,'Snow'  
  2. df.iloc[1,2]        #第1行第2列的数据,32  
  3. df.iloc[[1,3],0:2]  #第1行和第3行,从第0列到第2列(不包含第2列)的数据  
  4. df.iloc[1:3,[1,2]   #第1行到第3行(不包含第3行),第1列和第2列的数据  

4. ix, ix很强大,loc和iloc的功能都能做到 ix[row_index, column_index]

ix虽然强大,然而已经不再被推荐,因为在最新版的pandas里面,ix已经成为deprecated。(https://github.com/pandas-dev/pandas/issues/14218)

大概是因为可以混合label和position导致了很多用户问题和bug。

所以,用label就用loc,用position就用iloc。

[python]  view plain  copy
  1. df.ix[0,0]      #第0行第0列的数据,'Snow'  
  2. df.ix[0,[1,2]]      #第0行,第1列和第2列的数据  
  3. df.ix[0:2,[1,2]]    #第0行到第2行(包含第3行),第1列和第2列的数据  
  4. df.ix[1,0:2]        #第1行,从第0列到第2列(不包含第2列)的数据  
切片时,iloc行不含下标上限,loc,ix行包含,列iloc和ix都不含列下标上限。(设计者的缺憾。。。)

(持续总结更新中)

在刚开始使用pandas DataFrame的时候,对于数据的选取,修改和切片经常困惑,这里总结了一些常用的操作。

先初始化一个DateFrame做例子

[python]  view plain  copy
  1. import numpy as np  
  2. import pandas as pd  
  3. df = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])  
df是这样的
[python]  view plain  copy
  1. In [35]: df  
  2. Out[35]:   
  3.      name    gender  age  
  4. 0    Snow     M       22  
  5. 1    Tyrion   M       32  
  6. 2    Sansa    F       18  
  7. 3    Arya     F       14  
如果每列都有column name,比如这里是: 
[python]  view plain  copy
  1. In [42]: df.columns  
  2. Out[42]: Index(['name''gender''age'], dtype='object')  

1. df['column_name'] ,df[row_start_index, row_end_index] 选取指定整列数据

[python]  view plain  copy
  1. df['name']  
  2. df['gender']  
  3. df[['name','gender']] #选取多列,多列名字要放在list里  
  4. df[0:]  #第0行及之后的行,相当于df的全部数据,注意冒号是必须的  
  5. df[:2]  #第2行之前的数据(不含第2行)  
  6. df[0:1#第0行  
  7. df[1:3#第1行到第2行(不含第3行)  
  8. df[-1:] #最后一行  
  9. df[-3:-1#倒数第3行到倒数第1行(不包含最后1行即倒数第1行,这里有点烦躁,因为从前数时从第0行开始,从后数就是-1行开始,毕竟没有-0)  

2. loc,在知道列名字的情况下,df.loc[index,column] 选取指定行,列的数据

[python]  view plain  copy
  1. # df.loc[index, column_name],选取指定行和列的数据  
  2. df.loc[0,'name'# 'Snow'  
  3. df.loc[0:2, ['name','age']]          #选取第0行到第2行,name列和age列的数据, 注意这里的行选取是包含下标的。  
  4. df.loc[[2,3],['name','age']]         #选取指定的第2行和第3行,name和age列的数据  
  5. df.loc[df['gender']=='M','name']     #选取gender列是M,name列的数据  
  6. df.loc[df['gender']=='M',['name','age']] #选取gender列是M,name和age列的数据  
3. iloc,在column name特别长或者index是时间序列等各种不方便输入的情况下,可以用iloc (i = index), iloc完全用数字来定位 iloc[row_index, column_index]
[python]  view plain  copy
  1. df.iloc[0,0]        #第0行第0列的数据,'Snow'  
  2. df.iloc[1,2]        #第1行第2列的数据,32  
  3. df.iloc[[1,3],0:2]  #第1行和第3行,从第0列到第2列(不包含第2列)的数据  
  4. df.iloc[1:3,[1,2]   #第1行到第3行(不包含第3行),第1列和第2列的数据  

4. ix, ix很强大,loc和iloc的功能都能做到 ix[row_index, column_index]

ix虽然强大,然而已经不再被推荐,因为在最新版的pandas里面,ix已经成为deprecated。(https://github.com/pandas-dev/pandas/issues/14218)

大概是因为可以混合label和position导致了很多用户问题和bug。

所以,用label就用loc,用position就用iloc。

[python]  view plain  copy
  1. df.ix[0,0]      #第0行第0列的数据,'Snow'  
  2. df.ix[0,[1,2]]      #第0行,第1列和第2列的数据  
  3. df.ix[0:2,[1,2]]    #第0行到第2行(包含第3行),第1列和第2列的数据  
  4. df.ix[1,0:2]        #第1行,从第0列到第2列(不包含第2列)的数据  

切片时,iloc行不含下标上限,loc,ix行包含,列iloc和ix都不含列下标上限。

转载地址:https://blog.csdn.net/yoonhee/article/details/76168253

猜你喜欢

转载自blog.csdn.net/qiao8756/article/details/80598849