pandas 切片,iloc,loc,ix

import pandas as pd

##create a raw data

raw_data = {
    'regiment': ['Nighthawks', 'Nighthawks', 'Nighthawks', 'Nighthawks', 'Dragoons',
    'Dragoons', 'Dragoons', 'Dragoons', 'Scouts', 'Scouts', 'Scouts', 'Scouts'],
    'company': ['1st', '1st', '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd', '2nd'],
    'deaths': [523, 52, 25, 616, 43, 234, 523, 62, 62, 73, 37, 35],
    'battles': [5, 42, 2, 2, 4, 7, 8, 3, 4, 7, 8, 9],
    'size': [1045, 957, 1099, 1400, 1592, 1006, 987, 849, 973, 1005, 1099, 1523],
    'veterans': [1, 5, 62, 26, 73, 37, 949, 48, 48, 435, 63, 345],
    'readiness': [1, 2, 3, 3, 2, 1, 2, 3, 2, 1, 2, 3],
    'armored': [1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1],
    'deserters': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3],
    'origin': ['Arizona', 'California', 'Texas', 'Florida', 'Maine', 'Iowa', 'Alaska', 'Washington', 'Oregon', 'Wyoming', 'Louisana', 'Georgia']
}

df =pd.DataFrame(raw_data,columns = ['regiment', 'company', 'deaths', 'battles', 'size', 'veterans', 'readiness', 'armored', 'deserters', 'origin'])

df = df.set_index('origin')

df.head()

##1、选择一列,生成一个series
df['size']

##2、选择一列,生成一个dataframe
df[['size']]

##3、选择多列
df[['company','deaths']]

##4、根据行索引选择一行,生成一个series
df.loc['California']
##用iloc会出错,iloc接受int

##5、根据行索引选择一行,生成一个一行的df
df.loc[['California']]

##6、根据行索引选择多行,生成一个df
df.loc[['Arizona', 'California']]

##以上得知,pandas df的行和列是没有区别的,选择列索引,直接df[],选择行索引df.loc[]


##iloc
# 选择第二行,生成Series
df.iloc[1]
##选择第二行,生成df
df.iloc[[1]]

##选择前两行,左才右开
df.iloc[:2]

##选择第二到最后一行
df.iloc[1:]

##选择第二到第五行
df.iloc[1:5]



### 行列选择,使用loc行列索引进行行列选择
df.loc[['Texas','California'],['size','armored']]


##行列选择,使用iloc位置进行行列选择 0:5行,1,6,7列
df.iloc[0:5,[1,6,7]]


##选择前五列
df.iloc[:,:5]
# 用loc会出错


##条件过滤
df[(df['battles']>2) & (df['battles']<5)]


##行列同时选择
df.loc[(df['battles']>2) & (df['battles']<5),['size','battles']]


##loc根据索引,iloc根据位置,行列同时选择用loc


##根据索引和位置混合选择ix
df.ix[:3,['size','battles']]
df.ix[['California','Texas'],:5]

##条件和列索引
df.ix[(df['battles']>2) & (df['battles']<5),['size','battles']]


# 1. df[]直接索引
# 直接索引索引的是列,方口号里面的内容一般是列索引名。也可以接受一个列名组成的list来接受多个列名。
df['size']
df[['size','battles']]
# 如果要交换两列,直接用这样的方法是不对的:

df.loc[:,['size','battles']] = df[['battles', 'size']]

# 这是因为pandas默认在赋值的时候回匹配列名,这里面的AB和BA实际上没有区别。如果想要交换两列的话,应该使用AB两列的值作为右值,这样就不带列索引名了。
df.loc[:,['size','battles']] = df[['battles', 'size']].values


raw_data_1={'a':[1,2,3],1:[4,5,6],'c':[10,9,8]}

df_1=pd.DataFrame(raw_data_1)

# 选择列,不会取1
df_1[1]

##选择行
df_1[0:2]

# 1).loc,.iloc,.ix,只加第一个参数如.loc([1,2]),.iloc([2:3]),.ix[2]…则进行的是行选择
# 4)df[]只能进行行选择,或列选择,不能同时进行列选择,列选择只能是列名。

猜你喜欢

转载自blog.csdn.net/sjch1988/article/details/80910382