非最终版本,不断完善修改,整理成自己可以参考的文档
一、定义
基本数据定义
import numpy as np
import pandas as pd
df = pd.DataFrame(data = [['lisa','f',22],['joy','f',22],['tom','m','21']],
index = [1,2,3],
columns = ['name','sex','age'])
具有层次化索引的DataFrame
dfmi = pd.DataFrame([list('abcd'),list('efgh'),list('ijkl'),list('mnop')],
columns=pd.MultiIndex.from_product([['one','two'],
['first','second']]))
二、增
2.1 按列增加
citys = ['ny','zz','xy']
df.insert(0, 'city', citys) # 在指定位置添加列
jobs = ['student','AI','teacher']
df['job'] = jobs # 在最后添加一列job
2.2 按行增加
df.loc[4] = ['zz','mason','m',24,'engineer'] # 添加一行,索引为4;若有4,则直接修改原值
df = df.append(df.loc[2]) # 用append在尾部直接添加一列;append会创建一个修改的副本
三、删
3.1 删除行
df.drop([1,4], axis=0, inplace=True) # 删除【所有】index为1和3的行,inplace=True表示直接删除
3.2 删除列
df.drop(['name', 'sex'], axis=1, inplace=True) # 删除【所有】名为name和sex的列
del df['name'] # 删除name列
ndf = df.pop('name') # 删除name列,返回该列Series给ndf
四、查
4.1 df[‘column_name’] 和df[row_start_index: row_end_index]
# 查找列
df['name'] # name列,返回Series类型
df[['name']] # 返回DataFrame类型
df[['name', 'gender']] # 返回两列
# 查找行,注意有冒号,类似list的切片
df[0:1] # 查找第0行
df[0:3:2] # 第0行和第2行
df[-1::-1] # 倒叙排列(第2行,第1行,第0行)
4.2 df.loc[index,column]
重点:边界值【左闭右闭】,例如 [ , ‘name’ : ‘sex’],同时包含name列和sex列
# 按照索引【值】进行查找
# 小tip 行用位置,列用索引值
df.loc[df.index[0:2].to_list(), ['name', 'sex']]
df.loc[df.index[0:2].to_list(), 'name':'sex'] # 或者这样写,都可以
以上实现 查找红框内的值,如图
进一步,关于多重索引值的查找
在dfmi中查找红框中的值
dfmi.loc[0:2 ,('one', 'first'):('two', 'first')] # 注意这里行范围要写【0:2】
4.3 df.iloc[row_index, column_index]
重点:边界值【左闭右开】,不包含右边界值
# 按照索引【位置】进行查找
df.iloc[0:2, 0:2] # 实现查找上面红框的值
# 小tip,获得'name'列的位置
df.get_loc('name')
五、改
5.1 改行列标签名(name)
# index.name修改
df.index.names = ['index_name']
df.index.name = 'index_name'
# columns.name修改
df.columns.names = ['columns_name']
df.columns.name = 'columns_name'
# 多重索引标签名修改,如图
df_groupby = df.groupby(['name', 'sex']).sum()
df_groupby.index.names = ['index0_name', 'index1_name']
5.2 改行列标签
# 修改index
df.index = ['a', 'b', 'c']
df.rename({1:'a'}, axis=0, inplace=True)
# 修改columns
df.columns = ['name', 'gender', 'age']
df.rename({'sex':'gender'}, axis=1, inplace=True)
5.3 修改值
5.3.1 使用loc
df.loc[1, 'name'] = '云天明'
df.loc[2, ['name', 'sex']] = ['罗辑', '男']
5.3.2 使用iloc
与上面loc类似,不再赘述
【参考文章】