0
点赞
收藏
分享

微信扫一扫

数据分析:pandas

何晓杰Dev 2022-03-18 阅读 69

pandas

常用数据类型

  • Series 一维,带标签数组
  • DataFrame 二维,Series容器

Series创建

Series 一维,带标签数组

import pandas as pd
t = pd.Series([1,2,31,12,3,4])
print(t)

#结果为:
0     1
1     2
2    31
3    12
4     3
5     4
dtype: int64
import pandas as pd
t = pd.Series([1,2,31,12,3,4],index=list('abcdef'))
print(t)

#结果为:
a     1
b     2
c    31
d    12
e     3
f     4
dtype: int64
import pandas as pd
dict_temp = {'name':'zzz','age':18,'sex':'man'}
t =pd.Series(dict_temp)
print(t)

#结果为:
name    zzz
age      18
sex     man
dtype: object

在这里插入图片描述

Series切片和索引

在这里插入图片描述
在这里插入图片描述

查看索引值与值:
在这里插入图片描述

DataFrame

读取外部数据

数据存在csv中,我们直接使用pd. read_csv即可

对于数据库比如mysql或者mongodb中数据,pd.read_sql(sql_sentence,connection)

dataframe创建

在这里插入图片描述
DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

d1 = [{'name':'sss','age':16},{'name':'zzz','age':19},{'name':'ttt','age':18}]
d2 = {'name':['ccc','ggg'],'age':[12,15]}
t1 = pd.DataFrame(d1)
t2 = pd.DataFrame(d2)
print(t1)
print(t2)

#结果为:
  name  age
0  sss   16
1  zzz   19
2  ttt   18
  name  age
0  ccc   12
1  ggg   15
d1 = [{'name':'sss','age':16},{'name':'zzz','age':19},{'name':'ttt','age':18}]
d2 = {'name':['ccc','ggg'],'age':[12,15]}
d3 = np.arange(12).reshape(3,4)
t1 = pd.DataFrame(list(d1[0:2]))
t2 = pd.DataFrame(d2)
t3 = pd.DataFrame(d3,index=list('abc'),columns=list('qwer'))
print(t1)
print(t2)
print(t3)

#结果为:
  name  age
0  sss   16
1  zzz   19
  name  age
0  ccc   12
1  ggg   15
   q  w   e   r
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11

dataframe基本属性查询

在这里插入图片描述
展示部分:

d1 = [{'name':'sss','age':16},{'name':'zzz','age':19},{'name':'ttt','age':18}]
t1 = pd.DataFrame(list(d1[0:2]))
print(t1)
print(t1.shape)
print(t1.values)
print(t1.dtypes)

#结果为:
  name  age
0  sss   16
1  zzz   19
(2, 2)
[['sss' 16]
 ['zzz' 19]]
name    object
age      int64
dtype: object

排序

按年龄排序:

d1 = [{'name':'sss','age':16},{'name':'zzz','age':19},{'name':'ttt','age':18}]
t1 = pd.DataFrame(d1)
t2 = t1.sort_values(by='age',ascending=False)
print(t2)

取行列

1、方法一:
取行:方括号中写数组
取列:写字符串

d1 = [{'name':'sss','age':16},{'name':'zzz','age':19},{'name':'ttt','age':18}]
t1 = pd.DataFrame(d1)
t2 = t1.sort_values(by='age',ascending=False)
print(t2[:2])
print(t2['name'])

#结果为:
  name  age
1  zzz   19
2  ttt   18
1    zzz
2    ttt
0    sss
Name: name, dtype: object

2、方法二:loc与iloc
df.loc 通过标签索引行数据
df.iloc 通过位置获取行数据

d1 = np.arange(12).reshape(3,4)
t1 = pd.DataFrame(d1,index=list('abc'),columns=list('wxyz'))
print(t1)
s = t1.loc['a','x']
s1 = t1.loc['a',:]
s2 = t1.loc[['a','c'],:]
print(s)
print(s1)
print(s2)

#结果为:
   w  x   y   z
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11
1
w    0
x    1
y    2
z    3
Name: a, dtype: int32
   w  x   y   z
a  0  1   2   3
c  8  9  10  11
d1 = np.arange(12).reshape(3,4)
t1 = pd.DataFrame(d1,index=list('abc'),columns=list('wxyz'))
print(t1)
s = t1.iloc[:,2]
s1 = t1.iloc[[0,1],:]
print(s)
print(s1)

#结果为:
   w  x   y   z
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11
a     2
b     6
c    10
Name: y, dtype: int32
   w  x  y  z
a  0  1  2  3
b  4  5  6  7

布尔索引

两个条件时不可以写在一起,两个条件必须用括号括起来,必须分开用&或|连接,并且打印的是该条信息:
在这里插入图片描述

d1 = np.arange(12).reshape(3,4)
t1 = pd.DataFrame(d1,index=list('abc'),columns=list('wxyz'))
print(t1)
print()
print(t1[(4<t1['z'])&(t1['z']<10)])

#结果为:
   w  x   y   z
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11

   w  x  y  z
b  4  5  6  7

字符串方法

在这里插入图片描述

缺失数据处理

在这里插入图片描述
我们的数据缺失通常有两种情况:
一种就是空,None等,在pandas是NaN(和np.nan一样)
另一种是我们让其为0,蓝色框中

  • 对于NaN的数据

判断数据是否为NaN:pd.isnull(df),pd.notnull(df)

处理方式1:删除NaN所在的行列dropna (axis=0, how=‘any’, inplace=False)

处理方式2: 填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
只填充某一列,则将t换成t[“标签”]

  • 处理为0的数据:t[t==0]=np.nan

当然并不是每次为0的数据都需要处理
计算平均值等情况,nan是不参与计算的,但是0会

举报

相关推荐

0 条评论