1.3数据分析之----Pandas

import  pandas  as pd 
from numpy import nan as NA  # 导入惯例
#注意axis和how参数的用法。
df = pd.DataFrame([[1, 6.5, 3],[1, NA, NA],[NA, NA, NA],[NA, 6.5,3]],index=[10,20,30,40],columns=['a','b','c'])
df
abc
101.06.53.0
201.0NaNNaN
30NaNNaNNaN
40NaN6.53.0
df.dropna()       #删除缺失值****************************8
012
01.06.53.0
df.dropna(how='all')  # 只将整行都是缺失值的删除
012
01.06.53.0
11.0NaNNaN
3NaN6.53.0
df[4]=NA
df
abc4
101.06.53.0NaN
201.0NaNNaNNaN
30NaNNaNNaNNaN
40NaN6.53.0NaN
df.dropna(axis=1)      #axis=1指定以列的形式删除
10
20
30
40
df.dropna(how='all')
abc4
101.06.53.0NaN
201.0NaNNaNNaN
40NaN6.53.0NaN
df.dropna(axis=1,how='all')
abc
101.06.53.0
201.0NaNNaN
30NaNNaNNaN
40NaN6.53.0
df.dropna(axis=0)    #axis=0指定以行的形式删除,和df.dropna() 作用相同
abc4
data1={
    'num':[10,99,12,13,14,15,10],
    'name':['lili','wangyi','gouzi','xiaoye','yangyang','zhouyang','lili'],
    'age':[25,20,28,23,25,30,25],
    'address':['北京','上海','北京','上海','北京','上海','北京']
    
}
data1
{'num': [10, 99, 12, 13, 14, 15, 10],
 'name': ['lili', 'wangyi', 'gouzi', 'xiaoye', 'yangyang', 'zhouyang', 'lili'],
 'age': [25, 20, 28, 23, 25, 30, 25],
 'address': ['北京', '上海', '北京', '上海', '北京', '上海', '北京']}
df=pd.DataFrame(data1,index=['a','b','c','d','e','f','g'])
df
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouzi28北京
d13xiaoye23上海
e14yangyang25北京
f15zhouyang30上海
g10lili25北京
#补全缺失值*************************************8
import  pandas  as pd 
from numpy import nan as NA  # 导入惯例

df.loc['c':'f','age']=NA
df.fillna('wu')
df
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouziNaN北京
d13xiaoyeNaN上海
e14yangyangNaN北京
f15zhouyangNaN上海
g16wangli32北京
df1=pd.DataFrame(data1)
df1
numnameageaddress
010lili25北京
199wangyi20上海
212gouzi28北京
313xiaoye23上海
414yangyang25北京
515zhouyang30上海
616wangli32北京
df1.loc[1:4,'name']=NA           #既有显性,又有隐性,用loc
df1.fillna('555',inplace=True)    #   本身补全缺失值不能保存,必须使用inplace=Tru
df1
numnameageaddress
010lili25北京
19955520上海
21255528北京
31355523上海
41455525北京
515zhouyang30上海
616wangli32北京
df1
numnameageaddress
010lili25北京
19955520上海
21255528北京
31355523上海
41455525北京
515zhouyang30上海
616wangli32北京
#fillna是补全缺失值的方法,为它提供一个固定值即可:

df
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouziNaN北京
d13xiaoyeNaN上海
e14yangyangNaN北京
f15zhouyangNaN上海
g16wangli32北京
df.fillna(method='ffill')   # 使用前一个值进行填充
numnameageaddress
a10lili25.0北京
b99wangyi20.0上海
c12gouzi20.0北京
d13xiaoye20.0上海
e14yangyang20.0北京
f15zhouyang20.0上海
g16wangli32.0北京
#删除重复值*************************
df
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouzi28北京
d13xiaoye23上海
e14yangyang25北京
f15zhouyang30上海
g10wangli32北京
df.duplicated()     #1.筛选重复值*************************duplicated()
a    False
b    False
c    False
d    False
e    False
f    False
g     True
dtype: bool
df.drop_duplicates()  #2.删除重复值*************************duplicated()
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouzi28北京
d13xiaoye23上海
e14yangyang25北京
f15zhouyang30上海
df
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouzi28北京
d13xiaoye23上海
e14yangyang25北京
f15zhouyang30上海
g10lili25北京
df.duplicated(['num'])
a    False
b    False
c    False
d    False
e    False
f    False
g     True
dtype: bool
df.drop_duplicates(['num'])
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouzi28北京
d13xiaoye23上海
e14yangyang25北京
f15zhouyang30上海
df
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouzi28北京
d13xiaoye23上海
e14yangyang25北京
f15zhouyang30上海
g10lili25北京
df.drop_duplicates(['num'],inplace=True)
df
numnameageaddress
a10lili25北京
b99wangyi20上海
c12gouzi28北京
d13xiaoye23上海
e14yangyang25北京
f15zhouyang30上海
#使用replace将pandas对象中的指定值替换为别的值:只替换元素***********************
df1
numnameageaddress
010lili25北京
19955520上海
21255528北京
31355523上海
41455525北京
515zhouyang30上海
616wangli32北京


numnameageaddress
010lili25北京
19955520上海
21255528北京
31355523上海
41455525北京
515zhouyang30上海
616wangli32北京
import numpy  as np

df2 = pd.DataFrame(np.random.randint(12,size=(4,3)))
df2
012
01110
10111
2251
39102
df2.replace(10,NA)
012
011.0NaN
101.011.0
225.01.0
39NaN2.0
df1
numnameageaddress
010lili25北京
19955520上海
21255528北京
31355523上海
41455525北京
515zhouyang30上海
616wangli32北京
df1.replace('北京',NA)  #千万注意替换数据类型   比如5555的float类型
numnameageaddress
010lili25NaN
19955520上海
21255528NaN
31355523上海
41455525NaN
515zhouyang30上海
616wangli32NaN
df1
numnameageaddress
010lili25北京
19955520上海
21255528北京
31355523上海
41455525北京
515zhouyang30上海
616wangli32北京
df1.replace([20,25,30],[NA,'北京',0])
numnameageaddress
010.0lili北京北京
199.0555NaN上海
212.055528北京
313.055523上海
414.0555北京北京
515.0zhouyang0上海
616.0wangli32北京
df1.replace({32:NA})         # 参数的字典形式
numnameageaddress
010.0lili25.0北京
199.055520.0上海
212.055528.0北京
313.055523.0上海
414.055525.0北京
515.0zhouyang30.0上海
616.0wangliNaN北京
df1.describe()
numage
count7.0000007.000000
mean25.57142926.142857
std32.4389544.140393
min10.00000020.000000
25%12.50000024.000000
50%14.00000025.000000
75%15.50000029.000000
max99.00000032.000000
df1[(np.abs(df1['age'])>25)]
numnameageaddress
21255528北京
515zhouyang30上海
616wangli32北京
df1
numnameageaddress
010lili25北京
19955520上海
21255528北京
31355523上海
41455525北京
515zhouyang30上海
616wangli32北京
#随机和抽样********************************
order = np.random.permutation(7) # 5个数
order
array([4, 2, 1, 5, 0, 6, 3])
df1.iloc[order]     #随机
numnameageaddress
41455525北京
21255528北京
19955520上海
515zhouyang30上海
010lili25北京
616wangli32北京
31355523上海
df1.take(order)   #同上  #随机
numnameageaddress
41455525北京
21255528北京
19955520上海
515zhouyang30上海
010lili25北京
616wangli32北京
31355523上海
#分重复抽样和不重复抽样。pandas提供********************sample
df1.sample(n=3,replace=True)
numnameageaddress
41455525北京
515zhouyang30上海
21255528北京
#字符串操作 *********************8  str.upper()大写
dic= {'one':'feixue', 'two':np.nan, 'three':'tom', 'five':'jerry@film'}
s=pd.Series(dic)
s
one          feixue
two             NaN
three           tom
five     jerry@film
dtype: object
s.str.upper()
one          FEIXUE
two             NaN
three           TOM
five     JERRY@FILM
dtype: object
df1
numnameageaddress
010lili25北京
19955520上海
21255528北京
31355523上海
41455525北京
515zhouyang30上海
616wangli32北京
aa=df1.stack()

aa
0  num              10
   name           lili
   age              25
   address          北京
1  num              99
   name            555
   age              20
   address          上海
2  num              12
   name            555
   age              28
   address          北京
3  num              13
   name            555
   age              23
   address          上海
4  num              14
   name            555
   age              25
   address          北京
5  num              15
   name       zhouyang
   age              30
   address          上海
6  num              16
   name         wangli
   age              32
   address          北京
dtype: object
aa.unstack(0)
0123456
num10991213141516
namelili555555555555zhouyangwangli
age25202823253032
address北京上海北京上海北京上海北京
df1.T   #效果同上
0123456
num10991213141516
namelili555555555555zhouyangwangli
age25202823253032
address北京上海北京上海北京上海北京

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值