Pandas(一)

​ Pandas简介

Pandas 是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。

Pandas数据读取

代码实现!

import pandas as pd
import xlwt
import random
​
def r_csv():
    print('pandas读取csv文件')
    txt=pd.read_csv('text2.csv')
    print('查看前几行数据')
    print(txt.head())
    print('查看数据的形状,返回行数和列数')
    print(txt.shape)
    print('查看列名列表')
    print(txt.columns)
    print('查看索引列')
    print(txt.index)
    print('查看每列的数据类型')
    print(txt.dtypes)
    print('\n'*5)def r_txt():
    p=pd.read_csv(
        fpath='text1.txt',
        sep='\t',   #指定分割符
        header=None,        #没有数据头
        names=['pdate','pv','uv']   #自己制定列名
    )def r_excel():
    txt=pd.read_excel('ta.xls')
    print(txt)def r_mysql():
    import pymysql
    con=pymysql.connect(
        host='127.0.0.1',
        user='root',
        password='123456789',
        database='pro203',
        charset='utf8'
    )
    txt=pd.read_sql("select * from employee",con=con)
    print(txt)if __name__ == '__main__':
    r_csv()
    r_excel()

Pandas数据结构

  1. Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。

  2. Time- Series:以时间为索引的Series。

  3. DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。

  4. Panel :三维的数组,可以理解为DataFrame的容器。

  5. Panel4D:是像Panel一样的4维数据容器。

  6. PanelND:拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。

  • DataFrame:是一个表格型的数据结构。首先每列可以是不同的值类型(数值,字符串,布尔值等)。其次既有行索引也有列索引。并且它还可以被看作由Series组成的字典。创建dataframe的方式常见的有从纯文本文件,excel,mysql中读取。

  • Series:是一种类似于一维数组的对象,它由一组数据(不同的数据类型)以及一组与之相关的数据标签(索引)组成。

代码实现!

import pandas as pd
​
class Series:
    def way1(self):
        print('仅有数据列表即可产生最简单的Series')
        s1=pd.Series([1,'a','sfr',9])
        print("左侧为索引,右侧为数据")
        print(s1)
        print('获取索引')
        print(s1.index)
        print('获取数据')
        print(s1.values)def way2(self):
        print('创建一个具有标签索引的Series')
        s2=pd.Series([1,'a','sfr',9],index=['a','b','c','d'])
        print(s2)
        print(s2['c'])def way3(self):
        print('使用python字典创建Series')
        data={'a1':2020,'a2':229,'a3':1994,'a4':120}
        s3=pd.Series(data)
        print(s3)
        print(s3['a1'])
​
​
class Dataframe:
    def creat(self):
        print('根据多个字典序列创建dataframe')
        data={
            'state':['a1','a2','a3','a4'],
            'year':[i for i in range(2000,2004)],
            'pop':[9,8,7,4]
        }
        df=pd.DataFrame(data)
        print(df)
        print('查看每列的类型')
        print(df.dtypes)
        print('查看列索引和行索引')
        print(df.columns)
        print(df.index)
        print('=='*20)
        print('从DataFrame中查询Series','\n','如果只查询一列则返回的是pd.Series','\n','如果查询的是多行,多列则返回的是pd.DataFrame')
        print('=='*20)
        print('一列')
        print(df['year'])
        print(type(df['year']))
        print('查询多行')
        print(df[['year','pop']])
        print('查询一行')
        print(df.loc[1])
        print(type(df.loc[1]))
        print('查询多行')
        print(df.loc[1:3])
        print(type(df.loc[1:3]))
        print('=='*20)
        print('=='*20)
​
a=Series
print(a.way1(1))
print(a.way2(1))
print(a.way3(1))
b=Dataframe
print(b.creat(1))

Pandas查询数据

Pandas查询数据的几种方法。

  1. df.loc方法,根据行列标签值查询。
  2. df.iloc方法,根据行,列位置查询。
  3. df.where方法。
  4. df.query方法。

df.loc方法查询数据

  1. 使用单个label值查询数据。
  2. 使用值列表批量查询。
  3. 使用数值区间进行范围查询。
  4. 使用条件表达式查询。
  5. 调用函数查询。

注意:

  1. 以上查询方法适用于列行。

  2. 降维。DataFrame->Series->值。

代码实现!
import pandas as pd
def read():
    df=pd.read_csv('tian.csv')
    print(df.head())
    print('设置索引为日期,方便按日期筛选')
    df.set_index('ymd',inplace=True)
    print(df.index)
    print(df.head())
    print('替换温度的后缀')
    df.loc[:,'bWendu']=df['bWendu'].str.replace("℃",'').astype('int32')
    df.loc[:,'yWendu']=df['yWendu'].str.replace("℃",'').astype('int32')
    print(df.dtypes)
    print(df.head())
    print('使用单个label值查询数据')
    print('得到单个值->',df.loc['2018-05-25','bWendu'])
    print('得到一个Series->',df.loc['2018-04-01',['bWendu','yWendu']])
    print('使用值列表批量查询')
    print('得到一个Series->',df.loc[['2018-01-03','2018-01-04','2018-01-05'],'bWendu'])
    print('得到一个DataFrame->',df.loc[['2018-01-03','2018-01-04','2018-01-05'],['bWendu','yWendu']])
    print('使用数值区间进行范围查询(注意:包含开始和结束)')
    print('行index按区间->',df.loc['2018-01-04':'2018-01-14','bWendu'])
    print('列index按区间->',df.loc['2018-01-04','bWendu':'aqiInfo'])
    print('列和行都按区间查询->',df.loc['2018-01-04':'2018-01-14','bWendu':'aqiInfo'])
    print('使用条件表达式查询')
    print('bool列表的长度得等于行数或者列数')
    print('简单条件查询,最低温度低于-10度的列表->',df.loc[df['yWendu']<-10,:])
    print('观察一下booleam条件',df['yWendu']<-10)
    print('复杂条件查询')
    print('查询最高温度小于30度最低温度大于15度,并且是晴天,天气为优的数据')
    print(df.loc[(df["bWendu"]<=30)&(df["yWendu"]>=15)&(df["aqiLevel"]==1),:])
    print('再次观察复杂条件',(df["bWendu"]<=30)&(df["yWendu"]>=15)&(df["aqiLevel"]==1))
    print('调用函数查询')
    print('使用lambda表达式->',df.loc[lambda df:(df["bWendu"]<=30) & (df['yWendu']>=15),:])
    print('通过自定义函数查询')
    def query_my_data(df):
        return df.index.str.startswith('2018-09')&df["aqiLevel"]==1
    print(df.loc[query_my_data(df),:])
read()

反思总结

通过这一部分的学习,我体会到了pandas的强大。有人说pandas像是一个数据库,还有人说pandas是一个类似于Excel的但是功能不局限于Excel,对于这两张方法我都赞同。我的感觉是pandas功能强大,简单易用。
之前我认为pandas是数据分析的三大利器之一,但是现在我认为学会了pandas对自己学习其他的领域的知识有着很大的助力。学会了pandas就相当于将自己的水平提升了一个等级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值