Pandas 入门

# 导入包
import pandas as pd
# 加载数据
df=pd.read_csv('data/movie.csv')

1、查看部分数据【重要】

1.1加载列数据

# 加载一列数据
df['列名']
country_df=df['country'] # 查看列数据
country_df

# 加载多列数据
df[['列名1','列名2','列名3'...]]
country_df=df['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap']
country_df

1.2加载行数据 

# 通过行索引序号加载前五条数据,head(n=),默认n=5,可以手动传入想查看的行数
df.head()

# 通过行索引序号加载后五条数据,tail(n=),默认n=5,可以手动传入想查看的行数
df.tail()

# loc:根据行索引标签/值加载行数据,还可以通过切片方法获取数据,左闭右闭
# 加载一行数据
df.loc['行索引值']
df.loc[0] #获取一行数据,此时的0是说明此处的行索引值和行索引下标刚好相等

# 加载多行数据
df.loc[['行索引值1','行索引值2','行索引值3'...]]
df.loc[[0,99,999]]

df.loc['行索引值1':'行索引值2']
df.loc[4:10:2]  #从行索引值为4的开始到行索引的值为10的结束,步长为2
df.iloc[-3:]
df.iloc[4:10:2]

# 加载某行某列数据
df.loc[['行索引值'],['列索引值']]
df.loc[[0],['country']]
df.iloc[[0],[0]]

# 加载多行多列
df.loc[['行索引值1','行索引值2'...],['列索引值1','列索引值2'...]]
df.loc['行索引值1':'行索引值2','列索引值1':'列索引值2']

# 总结:loc方法切片取值时是左闭右闭,iloc方法取值时是左闭右开

1.3 分组聚合【重要】

分组聚合表达式

# 对一列分组一列聚合
df.groupby('分组的列名')['聚合的列名'].聚合函数()

# 对多列分组多列聚合 注意多列分组聚合时,聚合部分为两个列表,否则报错
df.groupby(['分组的列名1','分组的列名2'...])[['聚合的列名1','聚合的列名2'...]].聚合函数()

常用的聚合函数

sum() # 求和
mean() # 求平均
std() # 标准差
max() # 最大值
min() # 最小值
count() # 非空值个数
nunique() # 唯一值个数

2、 pandas数据结构

2.1 Series常用操作【知道】

Series创建:传入一个Python列表

  • 如果传入的数据类型是统一的数字,那么最终的dtype类型是int64

  • 如果传入的数据类型是统一的字符串,那么最终的dtype类型是object

  • 如果传入的数据类型是多种类型,那么最终的dtype类型也是object

# data=,传入要python列表;index=指定行索引,不传的话行索引默认为0,1,2...
pd.Series(data=,index=)

# 例子1
s = pd.Series(['banana', 42])
# 输出结果如下
0    banana
1        42
dtype: object

#例子2
s = pd.Series(['Wes McKinney','Male'],index = ['Name','Gender'])
# 输出结果如下
Name      Wes McKinney
Gender            Male
dtype: object

Series常用属性

s.index # 获取行索引,属性
s.keys() # 获取行索引,方法
# 属性后面不加(),方法后面加()

s.values # 获取值

Series常用方法

s.mean() # 平均值
s.max() # 最大值
s.min() # 最小值
s.std() # 标准差
s.value_counts() # 不同值(不同类别)的条目数量
s.count() # 非空值个数

s.describe() 
# 输出数值列统计描述:①count非空值个数,②mean平均值,③std标准差,④max最小值,⑤25%四分之一分位值,⑥50%二分之一分位值,⑦75%四分之三分位值,⑧最大值
# 输出非数值列统计描述:①count非空值个数,②unique唯一值个数,③top出现次数最多的值,④freq出现最多值的次数

通过布尔值列表获取Series部分数据

s[[True,False,True,False]]
# 返回为True的值,最后返回两个值

Series运算

  • series和数值型变量计算

    • 变量和series中的每个元素逐一进行计算

  • 两个Series之间计算

    • 根据索引匹配规则进行计算,相同的索引进行计算,不同的索引无法计算,用NaN填充

2.2 DataFrame常用操作【重要】

常用属性和方法

df.shape # 查看行数,列数
df.size # 查看数据个数
len(df) # 查看数据行数
df.count() # 查看各列非空值个数
df.max() # 查看各列最大值,数值列返回最大值,非数值列返回出现次数最多的值
df.min()
df.describe() # 返回数值列统计描述

DataFrame的布尔索引

  • 同Series一样,DataFrame也可以使用布尔索引获取数据子集

# 获取前5行数据中的第1、2、4个
movie.head()[[True,True,False,True,False]]
  • dataframe的运算

    • 当DataFrame和数值进行运算时,DataFrame中的每一个元素会分别和数值进行运算

    • 两个DataFrame之间进行计算,和series一样会根据索引的值进行对应计算

    • 当两个DataFrame索引值不能对应时,不匹配的会返回NaN

    • DataFrame中如果有非数值列,只能进行相加或者相乘的操作,对非数值列进行复制,其他计算会发生报错

  • 指定某列为DataFrame索引

df.set_index('列名') # 括号里列为指定索引列
pd.read_csv('path',index_col='列名') # 加载数据时通过index_col指定某列为df的索引

df.reset_index() # 重置索引,变为0,1,2,3...

修改行名列名

# 方法一
df.rename(index={'原行名1':'新行名1','原行名2':'新行名2'...},columns={'原列名1':'新列名1','原列名2':'新列名2'...},inplace=True)
# index=,columns= 后跟要修改的行列名字典
# inplace=True 在源数据上修改,默认False,在内存或者副本上修改,源数据并没有修改
# 涉及到df修改删除操作,不指定inplace=True,默认源数据不会进行修改,或者将修改的数据重新保存为一个变量名

# 方法二
将df.index 和 df.columns属性提取出来,修改之后,再赋值回去

添加删除插入

  • 通过dataframe['列名']添加新列,添加至最后

df['新列名'] = 常数
df['新列名'] = df['列名1'] + df['列名2'] # 数值列加减乘除都可以,一行一行计算

删除列

df.drop('列名',axis='columns',inplace=True) # inplace=True源数据上删除,axis='columns',默认按行删除,axis='index'

插入列

df.insert(loc=列下标数字, column='列名', value=该列所有的值)
# loc= 插入列的位置,按列索引序号
# column= 新插入列的名字
# value= 新插入列的值,可以是常用,也可以是计算完的结果

3、导出导入数据【重要】

3.1 导入加载数据

pd.read_xxx('文件路径') 
# 常用方法 read_csv(),read_excel()

# 加载mysql数据库数据
# 方法一:用DBAPI构建数据库链接engine
import pandas as pd
import pymysql
conn = pymysql.connect(host='localhost',
                       user='root',
                       password='',
                       database='database_name')
df = pd.read_sql("select * from table_name",con=conn)

# 方法二:用sqlalchemy构建数据库链接engine
import sqlalchemy
from sqlalchemy import create_engine
#connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)
connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}'.format('root',
													   '', 
													   'localhost', 
													   3306, 
													   'nowcoderdb')
engine=create_engine(connect_info)
df=pd.read_sql("select * from table_name",con=engine)

3.2 导出数据

pd.to_xxx('文件路径')
# 常用方法 to_csv(),to_excel()

# 导出数据到msyql数据库
import sqlalchemy
from sqlalchemy import create_engine
#connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)
connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}'.format('root',
													   '', 
													   'localhost', 
													   3306, 
													   'nowcoderdb')
engine=create_engine(connect_info)
df.to_sql('表名',engine,if_exists='')
# if_exists='',replace:删除表,重新创建保存数据(覆盖数据),append:向表中追加数据

4、Pandas数据分析入门

describe() 【知道

  • 默认打印数据值列统计描述

  • 打印非数值列统计描述

import numpy as np
df.describe(include=[np.object, pd.Categorical])
# np.object 字符串类型
# pd.Categorical dataframe特有的类别类型
  • info() 【知道

    • 返回所有字段的条目数量、数据类型、是否缺失,及当前数据集整体的内存占用情况

  • 常用排序方法

    • nlargest() 【知道

df.nlargest(n,columns)
# 根据指定列的值由大到小排列,返回n行数据

           nsmallest() 【知道

df.nsmallest(n,columns)
# 根据指定列的值由小到大排列,返回n行数据

           sort_values() 【重要

# 对一列进行排序 ascending默认升序True,False为降序
df.sort_values(by='列名',ascending='')

# 对多列进行排序
# 多列排序时,ascending 参数传入一个列表,排序参数也是一个列表,并且一一对应
df.sort_values(by=['列名1','列名2'...],ascending='')
df.sort_values(by=['列名1','列名2'...],ascending=[True,False...])

            去重 【重要

# 删除列名1,列名2...相同的数据,默认保留第一条数据
df.drop_duplicates(subset=['列名1','列名2'...])

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值