目录
DataFrame对象
创建DataFrame对象
列表方式创建DataFrame对象
DataFrame的重要性
DataFrame的取值
条件取值:
DataFrame的常用函数:
DataFrame的常用函数:
自定义函数apply
索引对象:
格式: pd.DataTrame(data,index,columns,dtype)
- columns 为列索引
- index 为行索引
- dtype为每一列数据的数据类型
import pandas as pd
data = [['苹果',5,100],['梨',4,50],['香蕉',2,80]]
columns = ['名称','单价','数量']
df = pd.DataFrame(data = data,columns = columns)
print(df)
'''输出:
名称 单价 数量
0 苹果 5 100
1 梨 4 50
2 香蕉 2 80
'''
df = pd.DataFrame([['苹果',5,10],['梨',4,50],['香蕉',2,80]],columns = ['名称','单价','数量'],index = [1,2,3])
print(df)
'''输出:
名称 单价 数量
1 苹果 5 10
2 梨 4 50
3 香蕉 2 80
'''
data = {
'名称':['苹果','梨','香蕉'],
'单价':[5,4,2],
'数量':[100,50,80]
}
df = pd.DataFrame(data=data)
print(df)
'''输出:
名称 单价 数量
0 苹果 5 100
1 梨 4 50
2 香蕉 2 80
'''
通用方法:loc按索引取值,iloc按下标取值(少用)
格式:df.loc[ 行索引或范围, 列索引或范围 ]
其中,范围用列表来表示,且可以用冒号: 表示全范围
返回结果: 如果行和列都是范围,结果为dataframe
行和列其中一个是范围,结果为Series
行和列都是一个值,结果为单个元素
例子:
data = {'姓名':['张三','李四','王五'],'年龄':[21,22,20],'成绩':[86,80,90]}
df = pd.DataFrame(data)
print(df)
'''输出:
姓名 年龄 成绩
0 张三 21 86
1 李四 22 80
2 王五 20 90
'''
print(df.loc[:,'年龄']) #取所有行的年龄列
'''输出:
0 21
1 22
2 20
'''
print(df.loc[1,:]) #取第一行的所有列
'''输出:
姓名 李四
年龄 22
数量 80
'''
print(df.loc[[1,2],['姓名','成绩']]) #取1 2 行的姓名、成绩列
'''输出:
姓名 成绩
1 李四 80
2 王五 90
'''
print(df.loc[1,'姓名']) #取第一行的姓名
'''输出: 李四
'''
提示:
当行的范围为:时,可以直接写成字典取值的形式
df.loc[:,'年龄'] 可以写成 df['年龄']
当列的范围为:时,可将列范围省略(loc不可省略)
df.loc[1,:] 可以写成 df.loc[1]
:条件取值:格式相同,只是把范围写成比较的式子
print(df.loc[df['年龄'] > 20]) #取年龄大于20的行的所有列
'''输出:
姓名 年龄 成绩
0 张三 21 86
1 李四 22 80
'''
print(df.loc[df['年龄'] > 20,['姓名','年龄']]) #取年龄大于20的行的姓名、年龄
'''输出:
姓名 年龄
0 张三 21
1 李四 22
'''
print(df.loc[:,df.loc[0] == 86]) #取第0行的值为90的列的所有行
'''输出:
成绩
0 86
1 80
2 90
'''
- 求和sum、求平均值mean、求最大值max、最小值min,这些函数用法相同,其中参数填0则计算列,填1则计算行,不填则视为0,得到的结果是Series
df = pd.DataFrame([[1,2,3],[4,5,6]],columns = ['a','b','c'])
print(df)
'''输出:
a b c
0 1 2 3
1 4 5 6
'''
print(df.sum(0)) #计算各列值的和
'''输出:
a 5
b 7
c 9
'''
print(df.sum(1)) #计算各行值的和
'''输出:
0 6
1 15
'''
给给df增加一个新的列‘和’,它的值为abc列的值的和
df = pd.DataFrame([[1,2,3],[4,5,6]],columns = ['a','b','c'])
def func(x): #这里的x代指df里的每一行
x['和'] = x['a'] + x['b'] + x['c']
return x
df = df.apply(func,axis=1) #axis=1表示以行为单位放入func
print(df)
'''输出:
a b c 和
0 1 2 3 6
1 4 5 6 15
'''
将bc列的值取绝对值
df = pd.DataFrame([[-1,-2,3],[-4,-5,6]],columns = ['a','b','c'])
def func(x): #这里的x代指df里的每一行列
x = abs(x)
return x
df[['a','b']] = df[['a','b']].apply(func,axis=0) #axis=1表示以列为单位放入func
print(df)
'''输出:
a b c
0 1 2 3
1 4 5 6
'''
索引对象可以理解为表的主键,DataFrame默认是没有索引对象的,且默认从0开始计数,可以使用set_index函数设置某个字段标签为索引对象
df = pd.DataFrame([[1,2,3],[4,5,6]],columns = ['a','b','c'])
print("默认索引:")
print(df)
df1 = df.set_index('a')
print("a作索引:")
print(df1)
'''输出:
默认索引:
a b c
0 1 2 3
1 4 5 6
a作索引:
b c
a
1 2 3
4 5 6
'''