创建一个随机的DataFrame数据,然后修改DataFrame数据中的某一列数据
data=DataFrame(data=np.random.randint(0,100,size=(5,4)),index=['a','b','c','d','e'],columns=['A','B','C','D'])
data['A']=0
print(data)
A B C D
————————————————
a 0 43 49 34
b 0 57 11 88
c 0 88 22 32
d 0 99 80 66
e 0 29 39 70
也可以这样修改:
data['A']=range(15,20)
print(data)
A B C D
——————————————————
a 15 89 66 57
b 16 96 46 50
c 17 75 55 11
d 18 16 52 85
e 19 20 34 19
传入Series类型修改DataFrame数据中某一列数据,需要指定Series类型的index行索引
series_data=pd.Series([1,2,3,4,5],index=['a','c','b','d','e'])
data['A']=series_data
print(data)
A B C D
————————————————
a 1 43 29 84
b 3 46 70 13
c 2 43 6 58
d 4 92 54 36
e 5 59 57 48
删除DataFrame数据中的某一列数据
del data['A'] # 删除A列数据
print(data)
B C D
——————————————
a 15 87 70
b 55 32 22
c 30 46 26
d 46 18 54
e 28 97 73
删除某一行数据
data=data.drop('a') # 删除a行
print(data)
根据新的索引重新排列数据,不能超出原有的索引内容,如果新规定的行索引不存在,数据为NaN
data=data.reindex(['b','a','d','c','e'])
# 如果想要将缺失位置的NaN修改为0
# data=data.reindex(['b','a','d','c','f'],fill_value=0)
print(data)
A B C D
——————————————————
b 36 52 26 88
a 15 65 58 34
d 3 65 34 6
c 98 25 30 73
e 86 93 40 34
将缺失位置的NaN通过插值法计算并不上内。ffill:从前面数据计算差值;bfill:从后面数据计算差值。
data=DataFrame(data=np.random.randint(0,100,size=(5,4)),index=['a','b','c','d','e'],columns=['A','B','C','D'])
data=data.reindex(['b','a','d','c','f'],method='ffill')
print(data)
A B C D
————————————————
b 49 11 26 87
a 2 49 80 36
d 43 58 67 51
c 98 92 94 59
f 17 58 65 8
扔掉包含缺失的数据(NaN)的行或者扔掉全部都是缺失数据的行
print(data.dropna()) # 扔掉包含缺失的数据(NaN)的行
print(data.dropna(how='all')) # 扔掉全部都是缺失数据的行
填充所有缺失数据为一个值(0)
print(data.fillna(0))
按列填充确实数据为不同的值,这里假设有gender、student、score三列数据,如果gender缺失为M,student缺失未unknow,score缺失未60:
print(data.fillna(
{'gender':'M','student':'unknow','score':60}
))
筛选数据,找出B列中大于等于20的数据
data=DataFrame(data=np.random.randint(0,100,size=(5,4)),index=['a','b','c','d','e'],columns=['A','B','C','D'])
print(data['B']>=20)
a True
b True
c True
d True
e True
Name: B, dtype: bool
print(data[data['B']>=20])
A B C D
——————————————————
a 0 96 65 86
b 13 98 9 31
d 79 31 51 62
data[‘B’]>=20会得到一组布尔类型,data[data[‘B’]>=20]就相当于data[True]或者data[False],True和False就是通过data[‘B’]>=20来的。
从列表中筛选数据,筛选name列数据在某个列表里面的元素,还是通过布尔值筛选
dic={
'name':['鳄鱼君Ba','www.e1yu.com'],
'salary':['1200','3333']
}
data=pd.DataFrame(data=dic,columns=['salary','name']) # 使用字典创建
select_list=['www.e1yu.com',20,30]
print(data[data['name'].isin(select_list)])
salary name
——————————————————————
1 3333 www.e1yu.com
利用groupby对数据进行分组机选sum,mean等
data=pd.DataFrame({
'cate_id':['a','b','c','d','e'],
'count':[10,20,30,40,50]
})
group_data=data.groupby('cate_id')
print(group_data) # <pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000000006991C08>
print(group_data.sum())
count
cate_id
a 10
b 20
c 30
d 40
e 50
DataFrame数据排序
数据排序——按索引名称升序
data=pd.DataFrame({
'cate_id':['a','b','c','d','e'],
'count':[10,20,30,40,50]
})
print(data.sort_index())
cate_id count
0 a 10
1 b 20
2 c 30
3 d 40
4 e 50
数据排序——按索引名称降序
data=pd.DataFrame({
'cate_id':['a','b','c','d','e'],
'count':[10,20,30,40,50]
})
print(data.sort_index(ascending=False))
cate_id count
4 e 50
3 d 40
2 c 30
1 b 20
0 a 10
数据排序——按某一列的数据进行排序
data=DataFrame(data=np.random.randint(0,100,size=(5,4)),index=['a','b','c','d','e'],columns=['A','B','C','D'])
print(data.sort_values(by='B'))
A B C D
a 93 33 63 5
b 49 49 18 91
d 40 59 98 42
e 65 83 40 35
c 38 89 54 95
数据汇总
data=DataFrame(data=np.random.randint(0,100,size=(5,4)),index=['a','b','c','d','e'],columns=['A','B','C','D'])
print(data.sum())
A 321
B 278
C 192
D 233
dtype: int64
pandas统计方法
函数 | 说明 |
---|---|
count | 计算非NaN数据的数量 |
min、max | 计算最小、最大值 |
argmin、argmax | 计算最小、最大值的位置 |
sum | 计算数值的和 |
mean | 计算平均数 |
median | 计算中位数 |
var | 计算方差 |
std | 计算标准差 |
pandas的层次化索引
同一个轴,可以用多种方式来索引。我们创建两个索引
data=pd.Series(
np.random.randint(1,6,size=7),
index=[
['b1','b2','b3','b4','b5','b6','b7'],
[1,2,1,2,1,2,3]
]
)
print(data)
b1 1 4
b2 2 4
b3 1 3
b4 2 5
b5 1 2
b6 2 2
b7 3 4
dtype: int32
两个DataFrame进行合并,合并必须要有公有列
data1=pd.DataFrame({
'key':['11','22','33','44'],
'data1':['100','200','300','400']
})
data2=pd.DataFrame({
'key':['11','22','33','44'],
'data2':['500','600','700','800']
})
print(pd.merge(data1,data2))
key data1 data2
0 11 100 500
1 22 200 600
2 33 300 700
3 44 400 800
两个DataFrame进行合并,指定连接方式。
data1=pd.DataFrame({
'key':['11','22','33','44','55'],
'data1':['100','200','300','400','900']
})
data2=pd.DataFrame({
'key':['11','22','33','44'],
'data2':['500','600','700','800']
})
print(pd.merge(data1,data2)) # 默认连接方式,会删掉不是共同拥有的
key data1 data2
0 11 100 500
1 22 200 600
2 33 300 700
3 44 400 800
print(pd.merge(data1,data2,how='outer)) # 不希望删掉不是共同拥有的
key data1 data2
0 11 100 500
1 22 200 600
2 33 300 700
3 44 400 800
4 55 900 NaN
# how的参数还可以为left、right
两个DataFrame进行合并,分别指定连接的列名称
data1=pd.DataFrame({
'lkey':['11','22','33','44','55'],
'data1':['100','200','300','400','900']
})
data2=pd.DataFrame({
'rkey':['11','22','33','44'],
'data2':['500','600','700','800']
})
print(pd.merge(data1,data2,left_on='lkey',right_on='rkey'))
lkey data1 rkey data2
0 11 100 11 500
1 22 200 22 600
2 33 300 33 700
3 44 400 44 800
练习:
1.假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末成绩的平均值。
2.假设张三期中考试数学被发现作弊,要记为0分,如何实现?
3.李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
4.后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
dic={
'张三':[150,150,150,150],
'李四':[0,0,0,0]
}
df=DataFrame(data=dic,index=['语文','数学','英语','理综'])
ddd=df #期中考试
ddd2=df #期末考试
张三 李四
———————————————————
语文 150 0
数学 150 0
英语 150 0
理综 150 0
求平局值,ddd+ddd2除2即可:
ddd+ddd2 / 2
张三 李四
————————————————————
语文 225.0 0.0
数学 225.0 0.0
英语 225.0 0.0
理综 225.0 0.0
将张三的数学成绩改为0:
ddd.loc['数学','张三'] =0 # 行为数学,列为张三
张三 李四
——————————————————
语文 150 0
数学 0 0
英语 150 0
理综 150 0
李四成绩都加100:
ddd['李四']+=100 # 取列
张三 李四
————————————————————
语文 150 100
数学 0 100
英语 150 100
理综 150 100
全部加10:
ddd+=10
张三 李四
————————————————————
语文 160 110
数学 10 110
英语 160 110
理综 160 110
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!