import pandas as pd
import numpy as np
from pandas import Series,DataFrame
df1=DataFrame(
np.random.choice(range(20),size=(4,3),replace=False),
index=list('ABCD'),
columns=list('abc')
)
df1
a b c
A 14 11 5
B 15 6 10
C 16 4 9
D 8 12 17
# 使用numpy的函数操作,axis=0 跨行
np.sum(df1,axis=1)
A 30
B 31
C 29
D 37
dtype: int64
# 平均
print(df1)
np.mean(df1)
a b c
A 14 11 5
B 15 6 10
C 16 4 9
D 8 12 17
a 13.25
b 8.25
c 10.25
dtype: float64
# 极差
np.ptp(df1)
13
# 最大
np.max(df1)
a 16
b 12
c 17
dtype: int32
# 最小
np.min(df1)
a 8
b 4
c 5
dtype: int32
对某个pbj 的行 或列 应用一个函数 func
def myptp(x):
return x.max()-x.min()
print(df1)
df1.apply(myptp)
a b c
A 14 11 5
B 15 6 10
C 16 4 9
D 8 12 17
a 8
b 8
c 12
dtype: int64
# 直接用匿名函数
df1.apply(lambda x:x.max()-x.min())
a 8
b 8
c 12
dtype: int64
df2=DataFrame(
np.random.randn(4,3),
index=list('ABCD'),
columns=list('一二三')
)
df2
一 二 三
A 0.903163 -1.857063 1.205145
B 0.052014 2.371273 0.358356
C -0.735644 -0.086702 0.257610
D 0.448260 2.394678 -0.672350
round(3.1415,2)
3.14
df2.apply(lambda x:round(x,3))
一 二 三
A 0.903 -1.857 1.205
B 0.052 2.371 0.358
C -0.736 -0.087 0.258
D 0.448 2.395 -0.672
# 这样写返回的是字符串
df2.applymap(lambda x:'%.3f'%x)
一 二 三
A 0.903 -1.857 1.205
B 0.052 2.371 0.358
C -0.736 -0.087 0.258
D 0.448 2.395 -0.672
# 方法1、返回的是float
df2.applymap(lambda x:float('%.3f'%x))
一 二 三
A 0.903 -1.857 1.205
B 0.052 2.371 0.358
C -0.736 -0.087 0.258
D 0.448 2.395 -0.672
# 方法2、返回的是float
df2.applymap(lambda x:float('%.3f'%x)).applymap(lambda x:float(x))
一 二 三
A 0.903 -1.857 1.205
B 0.052 2.371 0.358
C -0.736 -0.087 0.258
D 0.448 2.395 -0.672
# 方法3、返回的是float
DataFrame(df2.applymap(lambda x:float('%.3f'%x)),dtype=float)
一 二 三
A 0.903 -1.857 1.205
B 0.052 2.371 0.358
C -0.736 -0.087 0.258
D 0.448 2.395 -0.672
# list.sort() 操作于原值
# ndarray.sort() 操作于原值
# np.sort(ndarray) 原值不变,返回新值
obj.sort_index(ascending=True)默认升序
obj.sort_values(by=‘label’,axis=0,ascending=True,inplace=False)
by:str 表示根据axis方向的索引名进行排序
axis:0/1 表示轴
ascending:bool 默认升序,False降序
inplace:默认不在原值上排序,返回新值
# 准备个Series
s1=Series(np.random.choice(range(1,7),6,replace=False)*10,index=list('adefcb'))
s1
a 30
d 10
e 40
f 50
c 60
b 20
dtype: int32
# 排 索引
s1.sort_index()
a 30
b 20
c 60
d 10
e 40
f 50
dtype: int32
s1.sort_values()
d 10
b 20
a 30
e 40
f 50
c 60
dtype: int32
s1.sort_values(ascending=False)
c 60
f 50
e 40
a 30
b 20
d 10
dtype: int32
# 对 DataFrame 排序
df3 = DataFrame(
np.random.randint(1,100,15).reshape(3,5) ,
index = 'three/two/one'.split('/'),
columns=list('baced')
)
df3
b a c e d
three 32 59 26 72 47
two 55 46 62 67 70
one 34 14 54 8 71
# 排 索引
df3.sort_index()
b a c e d
one 34 14 54 8 71
three 32 59 26 72 47
two 55 46 62 67 70
df3.sort_index(axis=1)
a b c d e
three 59 32 26 47 72
two 46 55 62 70 67
one 14 34 54 71 8
# 排值
df3.sort_values(by='b')
b a c e d
three 32 59 26 72 47
one 34 14 54 8 71
two 55 46 62 67 70
# 按照one降序排序
df3.sort_values(by='one',axis=1,ascending=False)
d c b a e
three 47 26 32 59 72
two 70 62 55 46 67
one 71 54 34 14 8
# 模拟创建一个成绩表,语文,数学,英语。各科成绩有重复。
names = '尺,寸,人,下,匕,卜,之,田,丫,乃,贝,井,工,几,女,巨,爪,火,了,方,木,中,寸,石,户,友,夫,不,可,主,又,丑,巾,口,电,门,术,儿,羊,丁,心,天,化,气,正,页,兄,伏,大,计'.split(',')
df4 = DataFrame(
{
'语文':np.random.randint(90,100,50),
'数学':np.random.randint(80,100,50),
'英语':np.random.randint(60,100,50)
},
index = [np.random.choice(list('赵钱孙李周吴郑王'))+names.pop(np.random.randint(0,len(names))) for i in range(50)]
)
df4
语文 数学 英语
孙正 93 81 99
周匕 98 95 78
周页 97 91 95
吴之 98 92 63
周下 93 89 77
王寸 93 84 67
周又 90 94 92
周寸 92 99 62
周儿 97 84 97
王乃 90 97 64
钱术 91 84 67
郑木 95 87 64
赵计 96 89 65
周口 95 80 90
赵兄 96 81 65
周羊 94 93 73
吴工 98 93 91
赵人 98 96 73
钱心 92 85 78
赵门 92 80 77
吴丁 99 89 71
李丑 94 98 98
郑爪 99 83 65
钱巾 93 89 94
钱可 92 85 97
周石 93 92 74
李伏 99 89 65
吴友 92 95 85
郑中 95 82 91
王几 92 95 94
王气 95 86 69
李不 99 81 82
周尺 92 88 97
吴火 95 89 99
孙电 98 82 88
王化 93 99 79
周丫 96 89 67
郑户 91 83 82
王井 99 83 89
钱贝 95 88 67
吴夫 93 98 99
钱了 94 92 96
李卜 95 86 65
孙大 93 88 60
赵主 91 84 90
钱女 91 92 88
王天 91 95 66
赵田 96 90 79
郑巨 96 93 75
吴方 95 98 75
# 对df4按照 语文降序排序
df4.sort_values(by='语文',ascending=False)
语文 数学 英语
李伏 99 89 65
吴丁 99 89 71
郑爪 99 83 65
李不 99 81 82
王井 99 83 89
孙电 98 82 88
周匕 98 95 78
吴之 98 92 63
吴工 98 93 91
赵人 98 96 73
周儿 97 84 97
周页 97 91 95
赵田 96 90 79
郑巨 96 93 75
赵计 96 89 65
周丫 96 89 67
赵兄 96 81 65
吴火 95 89 99
郑中 95 82 91
吴方 95 98 75
王气 95 86 69
钱贝 95 88 67
周口 95 80 90
郑木 95 87 64
李卜 95 86 65
李丑 94 98 98
钱了 94 92 96
周羊 94 93 73
王化 93 99 79
吴夫 93 98 99
孙大 93 88 60
孙正 93 81 99
周石 93 92 74
周下 93 89 77
王寸 93 84 67
钱巾 93 89 94
钱心 92 85 78
周寸 92 99 62
王几 92 95 94
周尺 92 88 97
赵门 92 80 77
钱可 92 85 97
吴友 92 95 85
钱术 91 84 67
郑户 91 83 82
赵主 91 84 90
钱女 91 92 88
王天 91 95 66
周又 90 94 92
王乃 90 97 64
# 按照多个值排序 by=[ 列1,列2,... ] 语文降序排序
df4.sort_values(by=['语文','数学'],ascending=False)
语文 数学 英语
吴丁 99 89 71
李伏 99 89 65
郑爪 99 83 65
王井 99 83 89
李不 99 81 82
赵人 98 96 73
周匕 98 95 78
吴工 98 93 91
吴之 98 92 63
孙电 98 82 88
周页 97 91 95
周儿 97 84 97
郑巨 96 93 75
赵田 96 90 79
赵计 96 89 65
周丫 96 89 67
赵兄 96 81 65
吴方 95 98 75
吴火 95 89 99
钱贝 95 88 67
郑木 95 87 64
王气 95 86 69
李卜 95 86 65
郑中 95 82 91
周口 95 80 90
李丑 94 98 98
周羊 94 93 73
钱了 94 92 96
王化 93 99 79
吴夫 93 98 99
周石 93 92 74
周下 93 89 77
钱巾 93 89 94
孙大 93 88 60
王寸 93 84 67
孙正 93 81 99
周寸 92 99 62
吴友 92 95 85
王几 92 95 94
周尺 92 88 97
钱心 92 85 78
钱可 92 85 97
赵门 92 80 77
王天 91 95 66
钱女 91 92 88
钱术 91 84 67
赵主 91 84 90
郑户 91 83 82
王乃 90 97 64
周又 90 94 92
# df4.sum(axis=1)
# df4['总分']=df4.sum(axis=1)
df4.insert(3,'总分',df4.sum(axis=1))
df4
语文 数学 英语 总分
孙正 93 81 99 273
周匕 98 95 78 271
周页 97 91 95 283
吴之 98 92 63 253
周下 93 89 77 259
王寸 93 84 67 244
周又 90 94 92 276
周寸 92 99 62 253
周儿 97 84 97 278
王乃 90 97 64 251
钱术 91 84 67 242
郑木 95 87 64 246
赵计 96 89 65 250
周口 95 80 90 265
赵兄 96 81 65 242
周羊 94 93 73 260
吴工 98 93 91 282
赵人 98 96 73 267
钱心 92 85 78 255
赵门 92 80 77 249
吴丁 99 89 71 259
李丑 94 98 98 290
郑爪 99 83 65 247
钱巾 93 89 94 276
钱可 92 85 97 274
周石 93 92 74 259
李伏 99 89 65 253
吴友 92 95 85 272
郑中 95 82 91 268
王几 92 95 94 281
王气 95 86 69 250
李不 99 81 82 262
周尺 92 88 97 277
吴火 95 89 99 283
孙电 98 82 88 268
王化 93 99 79 271
周丫 96 89 67 252
郑户 91 83 82 256
王井 99 83 89 271
钱贝 95 88 67 250
吴夫 93 98 99 290
钱了 94 92 96 282
李卜 95 86 65 246
孙大 93 88 60 241
赵主 91 84 90 265
钱女 91 92 88 271
王天 91 95 66 252
赵田 96 90 79 265
郑巨 96 93 75 264
吴方 95 98 75 268
df4[df4['英语']>90]
语文 数学 英语 总分
孙正 93 81 99 273
周页 97 91 95 283
周又 90 94 92 276
周儿 97 84 97 278
吴工 98 93 91 282
李丑 94 98 98 290
钱巾 93 89 94 276
钱可 92 85 97 274
郑中 95 82 91 268
王几 92 95 94 281
周尺 92 88 97 277
吴火 95 89 99 283
吴夫 93 98 99 290
钱了 94 92 96 282
s6=Series(range(10),index=list('aaaabbbccc'))
s6
a 0
a 1
a 2
a 3
b 4
b 5
b 6
c 7
c 8
c 9
dtype: int64
# 索引有重复,读取
s6['a']
a 0
a 1
a 2
a 3
dtype: int64
s6.is_unique
True
# 可以用来判断 索引对象是否唯一
s6.index.is_unique
False
df4.index.is_unique
True