Pandas的主要模块

转自公众号数据分析1480,作者刘顺祥

数据读写

pd.read_csv:读取文本文件(csv、tsv、txt等格式)
pd.read_excel:读取电子表格(xls或xlsx格式)
pd.read_sql:读取数据库数据(需要pymysql或pymssql模块的配合)
df.to_csv:写入文本文件(df为DataFrame对象)
df.to_csv:写入电子表格
df.to_csv:写入数据库

例子
# 读入MySQL数据库数据
# 导入第三方模块
import pymysql

# 连接MySQL数据库
conn = pymysql.connect(host = 'localhost',password = 'test',database = 'test',port = 3306,charset = 'utf8')

# 读取数据
user = pd.read_sql('select * from topy',conn)
# 关闭连接
conn.close()

数据基本描述

df.head:预览数据前几行
df.tail:预览数据后几行
df.shape:返回数据的行列数
df.columns:返回数据集的列名称
df.dtypes:返回数据集各变量的类型
df.describe:返回数据的描述性统计量
S.value_counts:离散变量的频次统计
S.quantile:连续变量的分位数列表
S为Series对象

数据清洗

df.isnull:判断数据是否存在缺失值
df.duplicated:判断数据是否存在重复值
df.dropna:删除缺失值
df.fillna:填充缺失值
df.drop_duplicates:删除重复值
df.drop:删除变量或某些行(可以是变量也可以对行索引)
df.rename:重命名(同上)
df.reset_index:行索引转变量

类型转换与元素及运算

S.astype:类型转换(可转int、float、str等)
S.map:元素级映射
S.apply:元素级处理
pd.to_datetime:类型转换(可转日期时间型)

# 将birthday变量转换为日期
df.birthday=pd.to_datetime(df.birthday,format = '%Y%m%d'

# 将手机号转换为字符串
df.tel = df.tel.astype('str')

# 新增年龄和工龄两项
df['age'] = pd.datetime.today().year - df.birthday.dt.year
df['workage'] = pd.datetime.today().year - df.start_work.dt.year

# 将手机中间四位数隐藏起来
def.tel = df.tel.apply(func = lambda x : x.replace(x[3:7],'****'))
# 取出邮箱的域名
df['email_domain'] = df.email.apply(func = lambda x : x.split('@')[1])

# 取出人员的专业信息
df['profession'] = df.other.str.findall('专业:(.*?),')
# 去除birthday、start_work和other变量
df.drop(['birthday','start_work','other'],axis = 1,inplace = True)

数据合并、连接与汇总

pd.concat:数据合并(可以是行合并,也可以是列合并)
pd.merge:数据连接(与数据库的join操作类似)
pd.pivot_table:透视表
df.groupby:数据分组
df.groupby.summarize:分组统计

# 构造数据集df1和df2
df1 = pd.DataFrame({'name':['张三','李四','王五'],'age':[21,22,21],'gender:['M','F','M']})
df2 = pd.DataFrame({'name':['张一','李二','王六'],'age':[20,21,22],'gender:['F','F','M']})

# 数据的纵向合并
pd.concat([df1,df2],keys = ['df1','df2'])

# df3数据集的名字为Name
df3 =  pd.DataFrame({'Name':['张三丰','李二狗','王六'],'age':[20,21,22],'gender:['F','F','M']})
# 数据集的纵向合并
pd.concat([df1,df2])

# 三表的数据连接
merge1 = pd.merge(left = df1,right = df2,how = 'left')
merge2=pd.merge(left = merge1,right = df3,how = 'inner')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值