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[]只能进行行选择,或列选择,不能同时进行列选择,列选择只能是列名。
pandas 切片,iloc,loc,ix
最新推荐文章于 2023-12-25 14:02:12 发布