一,pandas介绍:
pandas是BSD许可的开源库,为Python编程语言提供了高性能,易于使用的数据结构和数据分析工具。长期以来,Python在处理数据和准备数据方面一直很出色,但在数据分析和建模方面却不那么出色。pandas帮助填补了这一空白,使您能够在Python中执行整个数据分析工作流,而不必切换到R等更具领域特定性的语言。与出色的IPython工具包和其他库结合使用,在Python中进行数据分析的环境在性能,生产力和协作能力方面表现出色。
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
二,pandas的使用:
Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。
DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
1.导包:
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
Series操作
2.Series创建:
a1 = Series([1,2,3,4])
a2 = Series([1,2,3,4],index=['a','b','c','d'])
a3 = Series({'a':1, 'b':2, 'c':3})
a4 = Series(np.array([1,2,3]))
3.Series显示索引:
obj = Series({'a':10,'b':12,'c':17})
obj.loc['a']
输出:
10
obj['a':'c']
输出:
a 10
b 12
c 17
dtype: int64
4.Series隐式索引:
obj = Series({'a':10,'b':12,'c':17})
obj[0:1]
输出
a 10
dtype: int64
obj.iloc[0]
输出:
10
obj.iloc[0:1]
输出:
a 10
dtype: int64
5.Series之间的运算:在运算中自动对齐不同索引的数据
如果索引不对应,则补NaN
A = pd.Series([2,4,6],index=[0,1,2])
B = pd.Series([1,3,5],index=[1,2,3])
display(A,B)
输出:
0 2
1 4
2 6
dtype: int64
1 1
2 3
3 5
dtype: int64
A+B
输出:
0 NaN
1 5.0
2 9.0
3 NaN
dtype: float64
DataFrame操作:
6.DataFrame创建:
data = {'color':['blue','green','yellow','red','white'],
'object':['ball','pen','pencil','paper','mug'],
'price':[1.2,1.0,0.6,0.9,1.7]}
frame = DataFrame(data,columns=['color','object','price','weight'],
index = ['one','two','three','four','five'])
frame
输出:
color object price weight
one blue ball 1.2 NaN
two green pen 1.0 NaN
three yellow pencil 0.6 NaN
four red paper 0.9 NaN
five white mug 1.7 NaN
DataFrame索引:
7.对列进行索引:
frame['color']
one blue
two green
three yellow
four red
five white
Name: color, dtype: object
8.对行进行索引:
-
使用.ix[]来进行行索引
-
使用.loc[]加index来进行行索引
-
使用.iloc[]加整数来进行行索引
frame.ix['one']
color blue
object ball
price 1.2
weight NaN
Name: one, dtype: object
frame.loc["two"]
输出:
color green
object pen
price 1
weight NaN
Name: two, dtype: object
frame.iloc[0:10]
color object price weight
one blue ball 1.2 NaN
two green pen 1.0 NaN
three yellow pencil 0.6 NaN
four red paper 0.9 NaN
five white mug 1.7 NaN
9. 连接mysql数据库:
import pymysql
conn = pymysql.connect(host = 'localhost',port = 3306,database = 'dushu',user = 'softpo',
password = 'root',charset = 'utf8')
df = pd.read_sql('select * from books',conn)
display(df.shape,df.head())
# 精确查询
df.query("book_name == '主人的溃败'")
# 模糊查询,like 像
df.query("book_name like '%的%'")
10,mysql pandas + pymysql只能读取,不能写入
#pip install mysqlclient
#pip install sqlalchemy
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+mysqldb://softpo:root@localhost/dushu?charset=utf8')
df2.to_sql('book211',engine,index=False)
with engine.connect() as conn:
# 修改了主键,增删改查都可以
# unsigned int8 - 128 ~ 127 无符号 0 ~ 255
conn.execute('alter table book985 change id id int unsigned not null auto_increment primary key;')
for i in df:
print(i)
# 工作中,高性能工作,很好处理数据库中的数据了
11.导入数据:
pd.read_csv(filename): 从csv文件导入数据
12.导出数据
pd.to_csv(filename): 导出数据
13.查看数据:
df.head(n): 查看dataframe对象的前n行
df.tail(n): 查看后n行
df.shape() 查看行数和列数
14.数据选取:
df[col]; 根据列名选取,并以Series的形式返回列
df[[col1,col2]]: 以dataframe形式返回多列
s.iloc[0]: 按照位置选取数据
s.lloc['index_one']:按索引选取数据
df.iloc[0,:]: 返回第一行
df.iloc[0,0]: 返回第一列的第一个元素
15…数据统计:
df.describe(): 查看数据值得汇总统计
df.mean(): 返回列的均值
df.corr(): 返回列与列之间的相关系数
df.count(): 返回列中非空值得个数
df.max() 返回每一列的最大值
df.min() 返回每一列的最小值
df.median() 返回每一列的中位数
df.std(): 返回每一列的标准差
16.数据合并:
df1.append(df2): 将df2中的每行添加到df1的尾部
df.concat([df1,df2],axis=1) 将df2中的列添加到df1的尾部
df1.join(df2,on = col1,how = 'inner') 对df1的列和df2的列执行SQL形式的join
17.数据处理:
df[df[col] > 5]: 选择col列的值大于5的行
df.slues(col1)ort_va: 按照列col1排序数据,默认升序排列
df.sort_values(col2,ascending=False) 按照列col1降序排列数据
df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据
df.groupby(col): 返回一个按列col进行分组的Groupby对象
df.groupby([col1,col2]): 返回一个按多列进行分组的Groupby对象
df.groupby(col1)[col2]: 返回按列col1进行分组后,列col2的均值
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
data.apply(np.mean): 对DataFrame中的每一列应用函数np.mean
data.apply(np.max,axis=1): 对DataFrame中的每一行应用函数np.max
18.数据清理:
df[df[col] > 0.5]: 选择col列的值大于0.5的行
df.sort_values(col1): 按照列col1排序数据,默认升序排列
df.sort_values(col2, ascending=False):按照列col1降序排列数据
df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据
df.groupby(col): 返回一个按列col进行分组的Groupby对象
df.groupby([col1,col2]): 返回一个按多列进行分组的Groupby对象
df.groupby(col1)[col2]: 返回按列col1进行分组后,列col2的均值
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
data.apply(np.mean): 对DataFrame中的每一列应用函数np.mean
data.apply(np.max,axis=1): 对DataFrame中的每一行应用函数np.max