4.4 行的访问
4.4.1 通过索引进行访问
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c'] ) print(df1) print() # print(df1['a']) 对列进行访问, 访问列, ‘a’ 列不存在 会报错 print(df1['a':'c']) # print(df1[0]) #对列进行访问, 访问列, 0 列不存在 会报错 print(df1[0:1])
4.4.2 loc()
loc() 是针对索引名称的访问方法
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c'] ) print(df1) print() # 访问 a 行 print(df1.loc['a']) print() # 访问 a c 行 print(df1.loc[['a', 'c']]) print() # 访问 a 到 b 行(包含起始位置) print(df1.loc['a':'b']) print() # loc[行,列] print(df1.loc['a':'b', 'gender'])
4.4.3 iloc()
iloc() 是针对数字索引的访问方法
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c'] ) print(df1) print() # 第 0 行 print(df1.iloc[0]) print() # 第 0 2 行 print(df1.iloc[[0, 2]]) print() # 第 0 到第 1 行 print(df1.iloc[0:2]) print() # iloc[行,列] # 第 0 1 行,第 1 列 print(df1.iloc[0:2, 1:2])
4.5 行的添加
使用 append() 方法进行添加
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c'] ) print(df1) print() df2 = pd.DataFrame(['zl', 14, 'm']) df1.append(df2)
需要指定列名与行的索引名
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c'] ) print(df1) print() df2 = pd.DataFrame([['zl', 14, 'm']]) df1.append(df2)
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c'] ) print(df1) print() df2 = pd.DataFrame( [['zl', 14, 'm']], columns=['name', 'age', 'gender'], index=['d'] ) df1.append(df2)
4.6 行的删除
调用 drop 方法通过索引标签删除行,标签重复会删除多行。
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'], ['zl', 11, 'f'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c', 'd'] ) print(df1) print() res = df1.drop('a') print(df1) print() print(res) print() res = df1.drop(['b', 'c'], axis=0) print(df1) print() print(res)
4.7 复合索引
DataFrame 的行索引和列索引都支持为复合索引,表示从不同角度记录数据。
4.7.1 设置复合索引
# 生成一个 6 行 3 列的数组 data = np.floor(np.random.normal(85, 3, (6,3))) df = pd.DataFrame(data) print(df) print('-'*50) # 设置行的复合索引 index = [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')] df.index = pd.MultiIndex.from_tuples(index) print(df) print('-'*50) # 设置列的复合索引 column = [('score', 'math'), ('score', 'chinese'), ('score', 'english')] df.columns = pd.MultiIndex.from_tuples(column) print(df) print('-'*50)
4.7.2 复合索引的访问
# 访问行 # 访问行索引为 1 print(df.loc[1]) print() # 不同级之间的索引使用逗号进行分割 # 访问行索引为 (1, 'a') print(df.loc[1, 'a']) print() # 访问行与列 # 访问行索引为 (1, 'a'); 列索引为 ('score', 'math') print(df.loc[1, 'a']['score','math']) print() # 同级索引访问多个 # 访问行索引为 (1, 'a') (1, 'b'), (2, 'a') (2, 'b'); # 列索引为 ('score', 'math') ('score', 'chinese') # 注意 行 列 索引要使用元组 # 行:([1, 2], ['a', 'b']) # 行索引 第一级 第二级 # 列:('score', ['math', 'chinese']) # 列索引 第一级 第二级 print(df.loc[([1, 2], ['a', 'b']), ('score', ['math', 'chinese'])])