1.DataFrame的属性
values | 元素 |
index | 索引 |
columns | 列名 |
dtypes | 类型 |
size | 元素个数 |
ndim | 维度数 |
shape | 数据形状(行列数) |
2.查看访问DataFrame中的数据——数据的基本查看方式
对单列数据的访问:DataFrame的单列数据为一个Series。根据DataFrame的定义可以知晓DataFrame
是一个带有标签的二维数组,每个标签相当每一列的列名。有以下两种方式来实现对单列数据的访问。
• 以字典访问某一个key的值的方式使用对应的列名,实现单列数据的访问。
• 以属性的方式访问,实现单列数据的访问。(不建议使用,易引起混淆)
对某一列的某几行访问:访问DataFrame中某一列的某几行时,单独一列的DataFrame可以视为一个
Series(另一种pandas提供的类,可以看作是只有一列的DataFrame),而访问一个Series基本和访问
一个一维的ndarray相同。
对多列数据访问:访问DataFrame多列数据可以将多个列索引名称视为一个列表,同时访问DataFrame
多列数据中的多行数据和访问单列数据的多行数据方法基本相同。
对某几行访问:
• 如果只是需要访问DataFrame某几行数据的实现方式则和上述的访问多列多行相似,选择所有列,使用
“:”代替即可
• head和tail也可以得到多行数据,但是用这两种方法得到的数据都是从开始或者末尾获取的连续数据。
默认参数为访问5行,只要在方法后方的“()”中填入访问行数即可实现目标行数的查看
loc,ilocf访问方式
loc方法是针对DataFrame索引名称的切片方法,如果传入的不是索引名称,那么切片操作将无法执行。
利用loc方法,能够实现所有单层索引切片操作。loc方法使用方法如下。
DataFrame.loc[行索引名称或条件, 列索引名称]
iloc和loc区别是iloc接收的必须是行索引和列索引的位置。iloc方法的使用方法如下。
DataFrame.iloc[行索引位置, 列索引位置]
使用loc方法和iloc实现多列切片,其原理的通俗解释就是将多列的列名或者位置作为一个列表或者数据传
入。
Ø 使用loc,iloc方法可以取出DataFrame中的任意数据。
Ø 在loc使用的时候内部传入的行索引名称如果为一个区间,则前后均为闭区间;iloc方法使用时内部传入的
行索引位置或列索引位置为区间时,则为前闭后开区间。
Ø loc内部还可以传入表达式,结果会返回满足表达式的所有值。
切片方法之ix
ix方法更像是loc和iloc两种切片方法的融合。ix方法在使用时既可以接收索引名称也可以接收索引位置。
其使用方法如下
DataFrame.ix[行索引的名称或位置或者条件, 列索引名称或位置]
使用ix方法时有个注意事项,第一条,当索引名称和位置存在部分重叠时,ix默认优先识别名称
控制ix方法需要注意以下几点。
Ø 使用ix参数时,尽量保持行索引名称和行索引位置重叠,使用时就无须考虑取值时区间的问题。一律为闭
区间
Ø 使用列索引名称,而非列索引位置。主要用来保证代码可读性
Ø 使用列索引位置时,需要注解。同样保证代码可读性
Ø 除此之外ix方法还有一个缺点,就是在面对数据量巨大的任务的时候,其效率会低于loc和iloc方法,所以
在日常的数据分析工作中建议使用loc和iloc方法来执行切片操作
###查看操作
import pandas as pd
##获取数据
detail = pd.read_excel('./meal_order_detail.xlsx',sep=",")
print("detail",detail)
print(detail.columns)
###获取某一列的数据----菜品名称
dishes_name = detail["dishes_name"]
print(dishes_name)
print(type(dishes_name))
####获取某一列数据----前5行
###获取菜品名称的前5行
dishes_name = detail['dishes_name'][:5]
print(dishes_name)
###head--可以获取前5行数据,可同过传递参数获取前n行
dishes_name = detail['dishes_name'].head()
print(dishes_name)
###获取菜品名称的后5行
dishes_name = detail['dishes_name'][-5:]
print(dishes_name)
###head--可以获取后10行数据,可同过传递参数获取前n行
###获取菜品名称的后10行
dishes_name = detail['dishes_name'].tail(10)
print(dishes_name)
###获取菜品名称的第11行--20行
dishes_name = detail['dishes_name'][10:20]
print(dishes_name)
####获取数据----先获取数据,在筛选行 df[列][行]
##与ndarray进行对比,arr[行,列]--------->行列同时选择
##进行多列数据,多行数据的筛选
##获取多列数据,将多列数据组成一个列表
df_three_co = detail[['order_id','dishes_id','dishes_name']][:10]
print(df_three_co)
###通过loc与iloc进行获取数据---同时筛选
##使用loc方式 df.loc[行名称,列名称]--->不支持下标
dishes_name = detail.loc[0:5,'dishes_name'] ##0:5 是数据的行名称
print(dishes_name)
###iloc---->同时筛选--->df.iloc[行下标,列下标]只支持下标索引
##只支持下标索引,不支持名称索引
dishes_name = detail.iloc[0:10,[0,1,5]]
print(dishes_name)
###ix 进行数据筛选--->同时混合索引
### 行和列都可以使用下标和行列名称
dishes_name = detail.ix[0:10,['order_id','dishes_id','dishes_name']]
print(dishes_name)
3.更改DataFrame中的数据
更改DataFrame中的数据,原理是将这部分数据提取出来,重新赋值为新的数据
需要注意的是,数据更改直接针对DataFrame原数据更改,操作无法撤销,如果做出更改,需要对更改
条件做确认或对数据进行备份
4.为DataFrame增加数据
DataFrame添加一列的方法非常简单,只需要新建一个列索引。并对该索引下的数据进行赋值操作即可。
新增的一列值是相同的则直接赋值一个常量即可。
###更改增加操作
import pandas as pd
import numpy as np
##加载数据
users = pd.read_excel('./users.xlsx',sep=',')
print("users",users)
###先确定数据,在进行更改
##获取sex列,为男性
col = users['sex']=='男'
# sex = users['sex'][col]
sex = users.loc[col,'sex']
print("sex",sex)
###更改全部男性为女性
col = users['sex']=="男"
users.loc[col,'sex'] = '女'
print('users',users)
##将行索引为偶a数行的age 改为88岁
col = users.index%2==0
users['age'][col]=88
# users.loc[col,'age']=88
print(users)
####增加数据
##增加一列数据
print("users的所有列名:",users.columns)
##增加一列数据
users["next_year"] = users['age']+1
print(users)
###
users['marry'] = True
print(users)
###在行的方向增加数据
df1 = pd.DataFrame([[1,2],[3,4]])
print("df1",df1)
df2 = pd.DataFrame([[5,6],[7,8]])
print("df2",df2)
##在df1下面添加df2
df_new = pd.concat((df1,df2),axis=0)
print(df_new)
##在df1右面添加df2
df_new = pd.concat((df1,df2),axis=1)
print(df_new)
5.删除某列某行数据
删除某列或某行数据需要用到pandas提供的方法drop,drop方法的用法如下
axis为0时表示删除行,axis为1时表示删除列
drop(labels, axis=0, level=None, inplace=False, errors='raise')
常用参数如下:
参数名称 | 说明 |
labels | 接收string或array。代表删除的行或列的标签。无默认 |
axis | 接收0或1。代表操作的轴向。默认为0。 |
levels | 接收int或者索引名。代表标签所在级别。默认为None |
inplace | 接收boolean。代表操作是否对原数据生效。默认为False。 |
###删除操作
import pandas as pd
###加载数据
users = pd.read_excel('./users.xlsx')
print('user',users)
###删除age列数据
##删除数据用drop
##labels指定删除的列或者行名称
#axis =0 删除行
#axis =1 删除列
# inplace = True 替换原来的数据
data = users.drop(labels='age',axis=1,inplace=True)
print(data)
print(users)
###删除前5行
data = users.drop(labels=[0,1,2,3,4],axis=0,inplace=True)
print(users)