Pandas

pandas介绍

pandas 是基于NumPy 的一种工具,提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。我们知道numpy能够帮助我们处理数值型数据,但是这还不够,除数值型数据以外,我们还有能够处理字符串数据、时间序列等数据。所以,pandas的除了能处理数值型数据,还可以帮助我们处理其他类型的数据。(字符串、时间序列等数据)

Pandas的常用数据类型

       1. Series 一维(带标签数组)

       2. DataFrame 二维 (Series容器)

一、Series的创建

 Series对象本质上由两个数组构成(键:值):一个数组构成对象的键(index(索引)),另一个是值(values)

1.通常的创建方式

import pandas as pd
a = pd.Series([1,2,3,4],index=list("abcd"))    #创建序列  index为指定索引的值 默认:0,1,2....
print(a)

"""
输出结果
a    1
b    2
c    3
d    4
dtype: int64
"""

 

2.字典方式创建

import pandas as pd
dict = {"name":"zhangsan","age":12,"tel":100}
data = pd.Series(dict)
print(data)
print(type(data))       #输出data的数据类型为Series

"""
运行结果:
name    zhangsan
age           12
tel          100
dtype: object
<class ‘pandas.core.series.Series‘>
"""

也可以用data.dtye查看数据类型,如果要修改数据类型,则data.astype(float)

 

Series取值

import pandas as pddict = {"name":"zhangsan","age":12,"tel":100}data = pd.Series(dict)print("键取值:")print(data[‘age‘],data[‘tel‘])      #通过键取值print("位置取值:")print(data[0],data[1])              #通过位置取值print("前两行:")print(data[:2])                     #取前两行print("不连续的:")print(data[[0,2]])                  #取不连续的  或者data[["name","tel"]]"""运行结果:键取值:12 100位置取值:zhangsan 12前两行:name    zhangsanage           12dtype: object不连续的:name    zhangsantel          100dtype: object"""

 data[data>55] 选出大于55的值。切片:data[0:2:1]

 

其他操作

import pandas as pd
dict = {"name":"zhangsan","age":12,"tel":100}
data = pd.Series(dict)
print(data.index)           #取索引
print(data.values)          #取值


"""
运行结果:
Index([‘name‘, ‘age‘, ‘tel‘], dtype=‘object‘)
[‘zhangsan‘ 12 100]
"""

 

 

二、pandas读取外部数据

import pandas as pd

#读取csv中的文件
# df = pd.read_csv("文件路径")    #如:pd.read_csv("data_file//data.csv")

#读取mysql中的数据
# import pymysql
# conn = pymysql.connect(host=‘localhost‘, user=‘root‘, passwd=‘root‘, db=‘anjuke‘)
# sql_sentence = "select * from lp_home"
# df = pd.read_sql(sql_sentence,conn)


#读取MongoDB中的数据
# from pymongo import MongoClient
# client = MongoClient()
# collection = client["数据库名"]["表名"]
# data = list(collection.find())

 

 

三、DataFrame

DataFrame对象既有行索引,又有列索引

行索引:表名不同行,横向索引(index),0轴,axis=0

列索引:表名不同列,纵向索引(columns),1轴,axis=1

1.通常创建方式:

import pandas as pd
import numpy as np

#index:行索引   columns:列索引  reshape:改变数组格式(三行四列)
pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))        
print(pf)
"""
运行结果:
   w  x   y   z
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11
"""

 

2.字典方式创建:

import pandas as pd
import numpy as np

dict = {"name":["张三","李四"],"age":[12,20],"tel":[100,101]}
pf = pd.DataFrame(dict)
print(pf)
dict1 = [{"name":"张三","age":12,"tel":100},{"name":"李四","age":20,"tel":101}]
pf1 = pd.DataFrame(dict1)
print(pf1)

"""
运行结果:
  name  age  tel
0   张三   12  100
1   李四   20  101
  name  age  tel
0   张三   12  100
1   李四   20  101
"""

 两种方式都是一样的结果

 

3.DataFrame的基础属性

df.shape  #行数 列数    

df.dtpyes  #列数据类型

df.ndim  #数据维度

df.index  #行索引

df.columns  #列索引

df.values  #对象值,二维ndarray数组

import pandas as pd
import numpy as np

dict = {"name":["张三","李四"],"age":[12,20],"tel":[100,101]}
pf = pd.DataFrame(dict)
#pf.index  行索引
print(pf.index)
#pf.columns     列索引
print(pf.columns)
#pf.values     对象值
print(pf.values)
#pf.shape   行数、列数
print(pf.shape)
#pf.dtypes  列数据类型
print(pf.dtypes)


"""
运行结果:
RangeIndex(start=0, stop=2, step=1)
Index([‘name‘, ‘age‘, ‘tel‘], dtype=‘object‘)
[[‘张三‘ 12 100]
 [‘李四‘ 20 101]]
(2, 3)
name    object
age      int64
tel      int64
dtype: object
"""

4.DataFrame整体情况查询

df.head(3)    #显示头部3行,默认5行

df.tail(3)    #显示末尾3行,默认5行

df.info()    #相关信息概述:行数、列数、列索引、列非空值个数、列类型、内存占用        可以用来判断缺失值

df.describe()    #快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值

 

5.排序

import pandas as pd
import numpy as np

dict = {"name":["张三","李四"],"age":[12,20],"tel":[100,101]}
pf = pd.DataFrame(dict)#按照某列排序
sort = pf.sort_values(by="age",ascending=False)                 #by:按哪个属性进行排序   ascending=False 降序排序    ascending默认为True 升序
print(sort)

"""
运行结果:
  name  age  tel
1   李四   20  101
0   张三   12  100
"""

 

6.切片

df[:20]  取前20行

df[‘age‘]  取age列

df[:20][‘age‘]  取age列的前20行

注意:

*方括号写数组,表示取行,对行进行操作

*方括号写字符串,表示取列,对列进行操作

7.loc选择方式

df.loc通过标签索引行数据

df.iloc通过位置获取行数据

import pandas as pd
import numpy as np

pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))pf.loc[:,"w"]    #取w列pf.loc["a",:]    #取a行#选取索引b行w z的值
print(pf.loc["b",["w","x"]])
#选取多行多列的值
print(pf.loc[["a","b"],["w","x"]])
#选取连续行多列的值
print(pf.loc["a":"c",["w","x"]])

"""
运行结果:
w    4
x    5
Name: b, dtype: int32
   w  x
a  0  1
b  4  5
   w  x
a  0  1
b  4  5
c  8  9
"""
import pandas as pd
import numpy as np

pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
# #选取索引b行w z的值

pf.iloc[1,:]     #取第2行
pf.iloc[:,2]     #取第3列
pf.iloc[[1,2],[0,1]]  #取2,3行的1,2列
pf.icol[1:,:2]   
pf.iloc[[1,2],[0,1]] = 100   #可赋值操作

 

取值条件

import pandas as pd
import numpy as np

pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
# print(pf)
#获取x列值大于1小于10的行
print(pf[(pf["x"]>1)&(pf["x"]<10)])         #注意:不同的条件之间需要用括号括起来

四、布尔索引

 缺失值数据处理

缺失值一个分为两种情况:一种是空与None   另一种是某些为0的数据      注意:pandas的NaN和np.nan是一样的

import pandas as pd
import numpy as np

pf = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
# print(pf)


pf.iloc[[1,2],0] = ""
pf.iloc[0,0] = 1
print(pf)

#处理w列为空的值
a = pf[‘w‘].fillna(0)
a[a==‘‘] = np.nan
pf[‘w‘] = a
print(pf)


"""
运行结果:
   w  x   y   z
a  1  1   2   3
b     5   6   7
c     9  10  11
     w  x   y   z
a    1  1   2   3
b  NaN  5   6   7
c  NaN  9  10  11
"""


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

#处理方式1:删除NaN所在的行列dropna(axis=0,how=‘any‘,inplace=False)
# print(pf.dropna(axis=0))        #删除含有NaN的行
# print(pf.dropna(axis=0,how=‘any‘,inplace=False))          #删除含有NaN的行    inplace:是否原地修改
# print(pf.dropna(axis=0,how=‘all‘))          #必须每行都有NaN才删除

#处理方式2:填充数据,t.fillna(t.mean()),  t.fiallna(t.median()),  t.fillna(0)
# print(pf.fillna(100))           #操作全部
# print(pf[‘w‘].fillna(0))         #操作具体的某一列

#处理为0的数据:t[t==0]=np.nan
#注意:不是每次为0的数据都需要处理,计算平均值等情况,nan不参与计算,但0参与计算

 

 

相关推荐