Python大数据分析之数据处理

# -*- coding: utf-8 -*-
#1, read_table()读取txt文件
from pandas import read_table
df=read_table(r‘D:\rz.txt‘,sep=" ")
‘‘‘查看前3条数据,默认是5条‘‘‘
print(df.head(3)) 

#2, read_csv()读取csv文件
from pandas import read_csv
df=read_csv(r‘D:\rz.csv‘,sep=",")
print(df)

#3, read_excel()读取excel文件
from pandas import read_excel
#df=read_excel(r‘d:\rz.xlsx‘,sheet_name=‘Sheet1‘)
#表示读取第一,第二个sheet页。
df=read_excel(r‘d:\rz.xlsx‘,sheet_name=[0,1])
print(df)

#4, pymysql读取mysql
import pandas as pd
import pymysql

dbconn=pymysql.connect(host="",
                       database="",
                       user="",
                       password="",
                       port=3306,
                       charset=‘utf8‘)
sqlcmd="select * from table"
a=pd.read_sql(sqlcmd,dbconn)
dbconn.close()
b=a.head()  #取前5条数据
print(b)

#5,to_csv()导出数据到csv文件
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘age‘:Series([26,85,64]),
         ‘name‘:Series([‘ben‘,‘john‘,‘jerry‘])})
df.to_csv(r‘d:\01.csv‘)  #默认带上index
df.to_csv(r‘d:\02.csv‘,index=False) #无index

#6,to_excel()导出数据到excel文件
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘age‘:Series([26,85,64]),
         ‘name‘:Series([‘ben‘,‘john‘,‘jerry‘])})
df.to_excel(r‘d:\01.xlsx‘)  #默认带上index
df.to_excel(r‘d:\02.xlsx‘,index=False) #无index

#7,to_sql导出数据到mysql
from pandas import DataFrame
from pandas import Series
from sqlalchemy import create_engine
#启动引擎,user:password是用户和密码,host:port是ip和端口,databasename是库名
engine=create_engine("mysql+pymysql://user:[email protected]:port/
                     databasename?charset=utf8")
df=DataFrame(
        {‘age‘:Series([26,85,64]),
         ‘name‘:Series([‘ben‘,‘john‘,‘jerry‘])})
#存入mysql
df.to_sql(name=‘table_name‘,
          con=engine,
          if_exists=‘append‘,
          index=False,
          index_label=False)

#8,重复值的处理
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘age‘:Series([26,85,64,85,85]),
         ‘name‘:Series([‘ben‘,‘john‘,‘jerry‘,‘john‘,‘john‘])})

#duplicated返回一个布尔型的Series,显示是否有重复行。
print(df.duplicated())  #默认判断全部列
print(df.duplicated(‘name‘)) #只判断name列是否重复
print(df.duplicated(‘age‘))  #只判断age列是否重复
print(df.drop_duplicates(‘age‘))  #去除重复项

#9,缺失值的处理
pandas使用浮点值NaN表示缺失数据,可使用.isnull和.notnull函数判断缺失。
1、dropna():去除数据结构中值为空的数据行。
2、fillna():用其他数值替代NaN,
   如果使用method=‘pad‘参数将使用前一个数据替代NaN,
   如果使用method=‘bfill‘参数将使用后一个数据值替代NaN,
   如果使用df.mean()参数将使用平均数或者其他描述性统计量来代替NaN,
3、fillna({‘列名1‘:值1, ‘列名2‘:值2}),传入一个字典,对不同列填充不同值。
4、strip():清楚字符型数据首尾的指定字符,默认为空格。lstrip删除首字符,rstrip删除尾字符
   df[‘name‘].str.strip()

#10,字段抽取,slice(start,stop),start是开始位,stop是结束位
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘序号‘:Series([1,2,3]),
         ‘手机‘:Series([16612345678,18812346789,19912344567])})
newdf=df[‘手机‘].astype(str) #将数值转化为字符串
bands=newdf.str.slice(0,3) #抽取手机号前3位,判断品牌
areas=newdf.str.slice(3,7) #抽取中间4位,判断号码地域
tell=newdf.str.slice(7,11) #抽取后4位
print(tell)

#11,字段拆分split(sep,n,expand=False)
#sep是分隔符,n是分隔后新增的列数,expand为True返回DataFrame,False返回Series
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘序号‘:Series([1,2,3]),
         ‘IP‘:Series([‘10.10.10.10‘,‘11.11.11.11‘,‘12.12.12.12‘])})
df[‘IP‘].str.strip() #IP先删除首尾空格
newdf=df[‘IP‘].str.split(‘.‘,3,True)  #按.分割,新增3列
newdf.columns=[‘IP1‘,‘IP2‘,‘IP3‘,‘IP4‘] #设置列名
print(newdf)

#12,重置索引,指定某列为索引,便于对其他数据进行操作
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘age‘:Series([26,85,64,85,85]),
         ‘name‘:Series([‘ben‘,‘john‘,‘jerry‘,‘john‘,‘john‘])})
df1=df.set_index(‘name‘) #以name列为新的索引
print(df1)

#13、记录抽取
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘序号‘:Series([1,2,3]),
         ‘电话‘:Series([16612345678,18812346789,19912344567]),
         ‘IP‘:Series([‘10.10.10.10‘,‘11.11.11.11‘,‘12.12.12.12‘])})
#按条件抽取,返回的都是DataFrame
print(df[df.电话==16612345678])
print(df[df.电话>16612345678])
print(df[df.电话.between(13400000000,18900000000)])
print(df[df.IP.isnull()])
print(df[df.IP.str.contains(‘10.‘,na=False)])

#14、随机抽样
#numpy.random.randint(start,end,num) 范围开始值、结束值、抽样个数
from pandas import DataFrame
from pandas import Series
import numpy
df=DataFrame(
        {‘age‘:Series([26,85,64,13,32,45,55,66,77,99]),
         ‘name‘:Series([‘ben‘,‘john‘,‘jerry‘,‘ab‘,‘cd‘,‘ef‘,
                        ‘gg‘,‘kk‘,‘rr‘,‘tt‘])})
r=numpy.random.randint(0,10,3)  #随机抽取3条记录,可以有重复,返回一个Series
print(r)
print(df.loc[r])

#15,通过索引名抽取数据
#loc[行标签,列标签],两个参数既可以是列表也可以是单个字符,如果都为列表,
#则返回的是DataFrame,否则为Series
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘age‘:Series([26,85,64,13,32,45,55,66,77,99]),
         ‘name‘:Series([‘ben‘,‘john‘,‘jerry‘,‘ab‘,‘cd‘,‘ef‘,
                        ‘gg‘,‘kk‘,‘rr‘,‘tt‘])})
print(df.loc[0])  #抽取第1行数据,返回的是Series
print(df.loc[[0,2]])  #抽取第1行和第3行数据,行索引必须是列表的形式
print(df.loc[0:6]) #抽取第1行到第7行的数据
print(df.loc[0:6,‘name‘]) #抽取name列的第1-7行数据
df=df.set_index(‘age‘) #更改age列为新的索引
print(df.loc[26:66]) #抽取两行之间的数据

#16,通过索引号抽取数据
#iloc[行索引号,列索引号]
from pandas import DataFrame
from pandas import Series
df=DataFrame(
        {‘age‘:Series([26,85,64,13,32,45,55,66,77,99]),
         ‘name‘:Series([‘ben‘,‘john‘,‘jerry‘,‘ab‘,‘cd‘,‘ef‘,
                        ‘gg‘,‘kk‘,‘rr‘,‘tt‘])})
print(df.iloc[1,0])  #抽取第2行、第1列的值,返回的是单个值
print(df.iloc[[0,2],:])  #抽取第1行和第3行的数据
print(df.iloc[:,1])  #抽取第2列的所有数据

#17,抽取字典数据
#字典的key和value各作为一列
from pandas import DataFrame
from pandas import Series
d1={‘a‘:‘[1,2,3]‘,‘b‘:‘[0,1,2]‘}
a1=DataFrame.from_dict(d1,orient=‘index‘) #将字段转为dataframe
b1=a1.reset_indprint(b1)
b1.columns=[‘key‘,‘value‘] #将列重命名为key和value
print(b1)

#字典的每一个元素作为一列,value的长度相同
d2={‘a‘:[1,2,3],‘b‘:[0,1,2]}
a2=DataFrame(d2)
print(a2)

#字典的每一个元素作为一列,value的长度不同
d3={‘a‘:Series([1,2,3]),‘b‘:Series([1,2,3,4])}
a3=DataFrame(d3)
print(a3)

#18,插入记录
import pandas as pd
df1=pd.DataFrame({‘a‘:[1,2,3],‘b‘:[‘a‘,‘b‘,‘c‘],‘c‘:["A","B","C"]})
print(df1)
#抽取df1的index=1的行,并将第1列、2列、3列赋值为--
df2=pd.DataFrame({df1.columns[0]:"--",df1.columns[1]:"--",
                  df1.columns[2]:"--"},index=[1])
print(df2)
#注意df1.loc[:0]不能写成df1.loc[0],因为前者返回的是DataFrame,后者返回的是Series
df3=pd.concat([df1.loc[:0],df2,df1.loc[1:]])
print(df3)
df4=df3.reset_index(drop=True) #重置索引,并删除新索引
print(df4)

#19,修改记录
#整体替换
df[‘colname‘]=[1,2,3]或Series([])
#所有列的单值替换
df.replace(‘B‘,‘A‘)  #用A替换B
#指定列的单值替换,用0替换"体育"列中的"作弊","军训"列中的"缺考"
df.replace({‘体育‘:‘作弊‘,‘军训‘:‘缺考‘},0)
#多值替换,用陈龙替换成龙,用小明替换小李
df.replace({‘成龙‘:‘陈龙‘,‘小李‘:‘小明‘})

#20,交换行或列
from pandas import DataFrame
df=DataFrame({‘a‘:[1,2,3],‘b‘:[‘a‘,‘b‘,‘c‘],‘c‘:["A","B","C"]})
print(df)
hang=[0,2,1]
df=df.reindex(hang) #交换行
print(df)
lie=[‘a‘,‘c‘,‘b‘]
df=df.reindex(columns=lie) #交换列columns=
print(df)

#交换两行
df.loc[[0,2],:]=df.loc[[2,0],:].values  #交换index=0和index=2两行数据
print(df)
#交换两列
df.loc[:,[‘a‘,‘b‘]]=df.loc[:,[‘b‘,‘a‘]].values
print(df)
#两列中间插入一列
df[‘d‘]=[4,5,6]  #先增加一列
print(df)
df.loc[:,[‘b‘,‘d‘]]=df.loc[:,[‘d‘,‘b‘]].values #交换两列的值
#交换两列的列名
lie=list(df.columns)
i=lie.index(‘b‘)
j=lie.index(‘d‘)
lie[i],lie[j]=lie[j],lie[i]
df.columns=lie
print(df)

#21,排名索引
#Series:sort_index(ascending=True)对index进行排序操作,True为升序
#DataFrame:sort_index(axis=0,by=None,ascending=True)
from pandas import DataFrame
df0={‘Ohio‘:[0,6,3],‘Texas‘:[7,4,1],‘California‘:[2,8,5]}
df=DataFrame(df0,index=[‘a‘,‘d‘,‘c‘])
print(df)
print(df.sort_index())
print(df.sort_index(by=‘Ohio‘))  #by针对某列进行升序排序
print(df.sort_index(by=[‘California‘,‘Texas‘]))
print(df.sort_index(axis=1))  #axis=1按横轴排序,axis=0按纵轴排序

#rank(method=‘average‘,asceding=True)把对象的values替换成名次(从1到n)
#mothod有4个可选项,average、min、max、first
from pandas import Series
ser=Series([3,2,0,3],index=list(‘abcd‘))
print(ser)
print(ser.rank())
print(ser.rank(method=‘min‘))
print(ser.rank(method=‘max‘))
print(ser.rank(method=‘first‘))

#22,数据合并
#记录合并:df2合并到df1中,为True则index顺延
df=pandas.concat([df1,df2],ignore_index=True)
df.append(df2,ignore_index=True) 

#字段合并
from pandas import DataFrame
import pandas
df=DataFrame({‘col1‘:[‘133‘,‘166‘,‘188‘],
              ‘col2‘:[‘0351‘,‘0354‘,‘0713‘],
              ‘col3‘:[‘2190‘,‘8513‘,‘0615‘]})

print(df[‘col1‘]+df[‘col2‘]+df[‘col3‘])

#字段匹配
‘‘‘
merge(x,y,left_on,right_on)
x表示第一个数据框,y表示第二个数据框,left_on表示第一个数据库用于匹配的列
right_on表示第二个数据框用于匹配的列。
‘‘‘
df1=DataFrame({‘学号‘:[1,2,3,4,5],
               ‘姓名‘:[‘张三‘,‘李四‘,‘王五‘,‘赵四‘,‘胡胡‘]})
df2=DataFrame({‘学号‘:[1,2,4,5,6],
               ‘电话‘:[‘13312345678‘,‘16612345678‘,
               ‘18812345678‘,‘19912345678‘,‘17712345678‘]})
df3=pandas.merge(df1,df2,left_on=‘学号‘,right_on=‘学号‘)
print(df3)
#类似数据库的右连接,how还有inner,outer,left,right四种
df4=df1.merge(df2,on=‘学号‘,how=‘right‘)
print(df4)

#23,数据计算
from pandas import DataFrame
import pandas
df=DataFrame({‘姓名‘:[‘小李‘,‘小红‘,‘小明‘,‘胡胡‘],
              ‘语文‘:[90,80,60,20],
              ‘数学‘:[60,70,99,100]})
df[‘总分‘]=df[‘语文‘]+df[‘数学‘]
print(df)
print(df.shape)

#24,数据分组
‘‘‘
cut(series,bins,right=True,labels=NULL)
series要分组的数据
bins分组的依据数据,必须是从小到大递增
right分组的时候右边是否闭合
labels分组的自定义标签
‘‘‘
bins=[min(df.语文)-1,60,70,80,max(df.语文)+1]
lab=["不及格","及格","良好","优秀"]
demo=pandas.cut(df.语文,bins,right=False,labels=lab)
print(demo)

#25,日期处理
#日期转换:to_datetime(string,format)
#format格式有%Y,%m,%d,%H,%M,%S 年-月-天-时-分-秒
from pandas import to_datetime
from pandas import DataFrame
from datetime import datetime
df=DataFrame({‘no‘:[1,2,3],
              ‘date‘:[‘2016/6/1‘,‘2017/6/1‘,‘2018/6/1‘]})
df_dt=to_datetime(df.date,format="%Y/%m/%d")
print(df_dt)

#日期格式化:
‘‘‘
apply(func,axis=0,arg=(),**kwds),将函数func应用到DataFrame行或列,axis=0
表示按列运算,axis=1表示按行运算。apply常和lambda函数一起使用。
datetime.strftime(x,format)
‘‘‘
df_str=df_dt.apply(lambda x:datetime.strftime(x,"%Y/%m/%d"))
print(df_str)

df1=DataFrame({‘ohio‘:[1,3,6],‘texas‘:[1,4,5],‘california‘:[2,5,8]},
               index=[‘a‘,‘c‘,‘d‘])
print(df1)
f=lambda x:x.max()-x.min()
print(df1.apply(f))

#日期抽取
‘‘‘
data_dt.dt.property,property有以下几种:
second表示1~60秒
minute表示1~60分
hour表示1~24小时
day表示1~31日
month表示1~12月
year表示年
weekday表示1~7
‘‘‘
print(df_dt)
print(df_dt.dt.year)
print(df_dt.dt.day)
print(df_dt.dt.month)

原文地址:https://www.cnblogs.com/xiaohuhu/p/11981160.html

时间: 2024-10-09 11:11:56

Python大数据分析之数据处理的相关文章

Python大数据处理模块Pandas

Python大数据处理模块Pandas [这篇转载自CSDNchengxuyuanyonghu的博客:http://blog.csdn.net/chengxuyuanyonghu/article/details/54956207] 目录 读取数据 索引 选择数据 简单运算 import pandas as pd read_csv to_csv 数据框操作 一            创建对象 二            查看数据 三            选择 四            缺失值处理

Python金融大数据分析

Python金融大数据分析(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1CF2NhbgpMroLhW2sTm7IJQ 提取码:clmt 复制这段内容后打开百度网盘手机App,操作更方便哦 内容简介  · · · · · · 唯一一本详细讲解使用Python分析处理金融大数据的专业图书:金融应用开发领域从业人员必读. Python凭借其简单.易读.可扩展性以及拥有巨大而活跃的科学计算社区,在需要分析.处理大量数据的金融行业得到了广泛而迅速的应用,并且成为该行业

基于Python Spark的大数据分析_pyspark实战项目课程

基于Python Spark的大数据分析(第一期) 课程介绍地址:http://www.xuetuwuyou.com/course/173 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:轩宇老师 1.开课时间:小班化教学授课,第一期开课时间为5月20号(满30人开班,先报先学!): 2.学习方式:在线直播,共8次课,每次2小时,每周2次(周三.六,晚上20:30 - 22:30),提供在线视频,课后反复学习: 3.报名课程后,请联系客服申请加入班级答疑交流QQ群:

学Python大数据处理用Anaconda

anaconda内部集成ipython.scipy和numpy基本都齐了,很好用! 下载地址  http://pan.baidu.com/s/1o6OEPIi python大数据处理模块pandas由scipy和numpy组成,这核心模块都在anaconda里预装了

《Python金融大数据分析》中文版PDF+英文版PDF+源代码

下载:https://pan.baidu.com/s/1ymQo0qlb79G9kgQEbTo9Fg <Python金融大数据分析>中文版PDF+高清英文版PDF+源代码 中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 中文版如图 原文地址:http://blog.51cto.com/3215120/2307576

Python Spark大数据分析实战教程下载|pyspark教程

分享网盘下载地址--https://pan.baidu.com/s/1c1OjpSW 密码: a5ks Python是数据分析最常用的语言之一,而Apache Spark是一个开源的强大的分布式查询和处理引擎. 本课程以案例驱动的方式讲解如何基于Python语言进行Spark Application编程,完成数据获取.处理.数据分析及可视化方面常用的数据分析方法与技巧,通过这些实际案例让学员轻松掌握使用PySpark分析来自不同领域的数据.

利用python进行数据分析--(阅读笔记一)

以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频表可以用于情感分析. 2.大多数软件是由两部分代码组成:少量需要占用大部分执行时间的代码,以及大量不经常执行的“粘合剂代码”. cython已经成为python领域中创建编译型扩展以及对接c/c++代码的一大途径. 3.在那些要求延迟性非常小的应用程序中(例如高频交易系统),为了尽最大可能地优化性能,耗费时间使用诸如C++这样更低级.更低生产率的语言进行

《利用Python进行数据分析》.(Wes McKinney).[PDF].pdf

下载地址:网盘下载 内容简介  · · · · · · [名人推荐] "科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法.本书在未来几年里肯定会成为Python领域中技术计算的权威指南." --Fernando Pérez 加州大学伯克利分校 研究科学家, IPython的创始人之一 [内容简介] 还在苦苦寻觅用python控制.处理.整理.分析结构化数据的完整课程?本书含有大量的实践案例,你将学会如何利用各种Python库(包括NumPy.pan

华杰手把手教你大数据分析

题目貌似取得有些大,准确的说应该叫基于大数据的机器学习,不过就这样吧>_< 每当说到大数据分析,有些人就很讳莫如深,故意讲得很复杂,生怕别人听懂就low了.然而其实可能没那么复杂,就像陈皓说的——所谓大数据不就是因为硬盘便宜了,所以不用删日志了吗?  <_< 好了,废话不多说,这次实现的目标很简单,就是通过已知数据,通过某人的姓名分析出他的性别.如你所知,中国的姓名那是千千万万,不像老外来来回回就是那几个名字,拿个数据表对照一下就可以了——毛子更懒,男的叫朱可夫,女的就叫朱可娃,自