定义

Pandas是基于Numpy的一种工具,目的是解决数据分析任务。通过纳入大量库和一些标准数据模型,提供了高效操作大型数据集所需工具;

安装

pip install pandas

数据类型

Series

  • 定义
    一维的数组类型,其中每个元素有各自标签;可当作一个由带标签元素组成的numpy数组,标签可以是数字或字符;
  • 关键点
    • 均匀数据;
    • 尺寸大小不变;
    • 数据的值可变;

Data

  • 定义
    二维、表格型的数组结构,可存储许多不同类型的数据,且每个轴都有标签,可当作一个series的字典;
  • 关键点
    • 异构数据;
    • 大小可变;
    • 数据可变;
  • 功能特点
    • 潜在的类是不同类型;
    • 大小可变;
    • 标记轴(行和列);
    • 可对行和列执行算术运算;

Panel

  • 定义
    三维,大小可变的数组;
  • 关键点
    • 异构数据;
    • 大小可变;
    • 数据可变;

三者区别与共性

  • 可变性:三者的值都是值可变的,除了series都是大小可变的;
  • 较高维数据结构是较低维数据结构的容器,Panel是Data 的容器,Data 是Series的容器;

如何使用Pandas

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# @Time    : 2018-12-15 14:29
# @Author  : Cunyu
# @Site    : 
# @File    : panda.py
# @Software: PyCharm

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 对象创建
seri = pd.Series([1,3,5,np.nan,9,10])
print(seri)

dates = pd.date_range(\'20181215\', periods=10)
print(dates)

df = pd.Data (np.random.randn(10,4), index=dates, columns=list(\'ABCD\'))
print(df)

# 查看数据
print(\'All:\\n\', df.head())
print(\'前三行:\\n\', df.head(3))
print(\'后三行\\n\', df.tail(3))
print(\'index:\\n\',df.index)
print(\'col:\\n\', df.columns)
print(\'values:\\n\', df.values)
print(\'desc:\\n\', df.describe())
print(\'转置:\\n\', df.T)
print(\'sort by an axis:\\n\', df.sort_index(axis=1, ascending=False))
print(\'sort by values:\\n\', df.sort_values(by=\'B\'))

# 获取,常用数据访问方法:.at, .iat, .loc, .iloc, .ix
print(\"df[\'A\']:\\n\", df[\'A\']) # 选择一列产生一个系列
print(\'df[0:3]:\\n\', df[0:3])
# 按标签选择
print(df.loc[dates[0]])
print(df.loc[:,[\'A\',\'B\']])
print(\'获取某一个特定值:\\n\', df.at[dates[0], \'A\'])
# 通过位置选择
print(\'获取每个特定位置的值:\\n\', df.iloc[3])
print(\'切片操作:\\n\', df.iloc[3:5, 0:2])
print(df.iat[1,1])
# 布尔索引
print(df[df.A>0])
print(\'filter:\\n\', df.copy())
print(\'demo:\\n\', df[df[\'D\'].isin([\'two\', \'four\'])])

\"\"\"
Series
\"\"\"
# pandas.Series(data, index, dtype, copy),构造函数创建
# 创建一个空系列
print(\'Null Series:\\n\', pd.Series())
# 从ndarray创建一个系列
data = np.array([\'a\', \'b\', \'c\', \'d\'])
print(\'ndarray Series:\\n\', pd.Series(data))
# 从字典创建一个系列
data = {\'a\':0, \'b\':3, \'c\':4}
print(\'dict Series:\\n\', pd.Series(dict))
# 从标量创建一个系列
print(\'scalar Series:\\n\', pd.Series(5, index=[1, 2, 4, 8, 0]))

# 从具有位置系列中访问数据
s = pd.Series([1,2,3,4,5],index = [\'a\',\'b\',\'c\',\'d\',\'e\'])
print(\'Search :\\n\', s[:3])
# 使用标签检索数据
s = pd.Series([1,2,3,4,5],index = [\'a\',\'b\',\'c\',\'d\',\'e\'])
print(\'s[\"d\"]: \', s[\'d\'])


# 属性或方法
# 1、axes,返回行轴标签列表
seri = pd.Series(np.random.randn(5))
print(\'axes:\\n\', seri.axes)
# 2、dtype,返回对象数据类型
print(\'dtype:\\n\', seri.dtype)
# 3、empty,若系列为空,返回True
print(\'empty:\\n\', seri.empty)
# 4、ndim,返回底层数据的维数
print(\'ndim:\\n\', seri.ndim)
# 5、size,返回基础数据中的元素数
print(\'size:\\n\', seri.size)
# 6、values,将系列作为ndarray返回
print(\'values:\\n\', seri.values)
# 7、head(n),返回前n行
print(\'head:\\n\', seri.head(3))
# 8、tail(n),返回后n行
print(\'tail:\\n\', seri.tail(3))

\"\"\"
Data 
\"\"\"
# pandas.Data (data,index,columns,dtype,copy)

# 创建空Data 
print(pd.Data ())
# 从列表创建Data 
print(\'List Data :\\n\', pd.Data ([1,3,5,7,9]))
# 从字典创建Data 
dict = {\'name\':[\'Manu\', \'Tim\', \'Paker\'], \'age\':[41, 42, 36]}
print(\'Dict Data :\\n\', pd.Data (dict))
# 从系列的字典创建Data 
dict_series = {\'First\' : pd.Series([1, 2, 3], index=[\'a\', \'b\', \'c\']),
      \'Second\' : pd.Series([1, 2, 3, 4], index=[\'a\', \'b\', \'c\', \'d\'])}
print(\'Series Data :\\n\', pd.Data (dict_series))
# 列选择,列添加,列删除
df = pd.Data (dict_series)
dict_series = {\'First\' : pd.Series([1, 2, 3], index=[\'a\', \'b\', \'c\']),
      \'Second\' : pd.Series([1, 2, 3, 4], index=[\'a\', \'b\', \'c\', \'d\'])}
print(\'列选择:\\n\', pd.Data (dict_series)[\'First\'])
df[\'Third\'] = pd.Series([11, 22, 44], index=[\'a\', \'b\', \'c\'])
print(\'列添加:\\n\', df)
del df[\'First\']
df.pop(\'Third\')
print(\'列删除:\\n\', df)


# 属性或方法
dict = {\'Name\':pd.Series([\'Tom\',\'James\',\'Ricky\',\'Vin\',\'Steve\',\'Minsu\',\'Jack\']),
   \'Age\':pd.Series([25,26,25,23,30,29,23]),
   \'Rating\':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
data  = pd.Data (dict)
# 1、axes,返回行轴标签列表
data  = pd.Data (np.random.randn(5))
print(\'axes:\\n\', data .axes)
# 2、dtypes,返回对象数据类型
print(\'dtype:\\n\', data .dtypes)
# 3、empty,若系列为空,返回True
print(\'empty:\\n\', data .empty)
# 4、ndim,返回底层数据的维数
print(\'ndim:\\n\', data .ndim)
# 5、size,返回基础数据中的元素数
print(\'size:\\n\', data .size)
# 6、values,将系列作为ndarray返回
print(\'values:\\n\', data .values)
# 7、head(n),返回前n行
print(\'head:\\n\', data .head(3))
# 8、tail(n),返回后n行
print(\'tail:\\n\', data .tail(3))
# 9、T,转置
print(\'T:\\n\', data .T)
# 10、shape,返回表示Data 的维度的元祖
print(\'shape:\\n\', data .shape)


\"\"\"
Panel
\"\"\"
# pandas.Panel(data,items,major_axis,minor_axis,dtype,copy)

# 创建面板

# 创建一个空面板
print(\'Null Panel:\\n\', pd.Panel())
# 从3D ndarray创建
data = np.random.rand(3, 4, 5)
print(\'3D narray:\\n\', pd.Panel(data))
# 从Data 对象的dict创建面板
data = {\'Item1\' : pd.Data (np.random.randn(4, 4)),
        \'Item2\' : pd.Data (np.random.randn(4, 5))}
print(\'Data 的Dict:\\n\', pd.Panel(data))

\"\"\"
描述性统计
\"\"\"
dict = {\'Name\':pd.Series([\'Tom\',\'James\',\'Ricky\',\'Vin\',\'Steve\',\'Minsu\',\'Jack\',
   \'Lee\',\'David\',\'Gasper\',\'Betina\',\'Andres\']),
   \'Age\':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   \'Rating\':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

data  = pd.Data (dict)
# 求和
print(\'sum:\\n\', data .sum())
# 均值
print(\'avg:\\n\', data .mean())
# 标准差
print(\'std:\\n\', data .std())
# 非空观测数量
print(\'count:\\n\', data .count())
# 中位数
print(\'median:\\n\', data .median())
# 模值
print(\'mode:\\n\', data .mode())
# 累计总和
print(\'cumsum:\\n\', data .cumsum())
# 累计乘积
print(\'cumprod:\\n\', data [\'Age\'].cumprod())
# 统计信息摘要
print(\'describe:\\n\', data .describe(include=\'all\'))

\"\"\"
函数应用
\"\"\"
# 表格函数应用:pipe()
def adder(elem1, elem2):
    return elem1+elem2
data  = pd.Data (np.random.randn(10,3),columns=[\'col1\',\'col2\',\'col3\'])
data .pipe(adder,10)
print(\'pipe:\\n\', data .pipe(adder,10))
# 行或列函数应用:apply()
print(\'apply:\\n\', data .apply(np.median))
# 元素函数应用:applymap()
print(\'map:\\n\', data [\'col1\'].map(lambda x:x*100))
print(\'applymap:\\n\', data .apply(lambda x:x*100))

\"\"\"
重建索引
\"\"\"
df1 = pd.Data (np.random.randn(10,3),columns=[\'col1\',\'col2\',\'col3\'])
df2 = pd.Data (np.random.randn(7,3),columns=[\'col1\',\'col2\',\'col3\'])
# 重建索引与其他对象对齐,reindx_like,填充方法:pad/ffill-前向填充、bfill/backfill-向后填充值、nearest-从最近索引值填充
df1 = df1.reindex_like(df2)
print(\'reindex_like:\\n\', df1)
print(\'ffill:\\n\', df2.reindex_like(df1, method=\'ffill\'))
# 重建索引时的填充限制
print(\'limit:\\n\', df2.reindex_like(df1, method=\'nearest\', limit=2))
# 重命名
print(\'rename:\\n\', df1.rename(columns={\'col1\':\'c1\', \'col2\':\'c2\'}))

\"\"\"
迭代
\"\"\"
SIZE=20

data  = pd.Data ({
    \'A\': pd.date_range(start=\'2016-01-01\',periods=SIZE,freq=\'D\'),
    \'x\': np.linspace(0,stop=SIZE-1,num=SIZE),
    \'y\': np.random.rand(SIZE),
    \'C\': np.random.choice([\'Low\',\'Medium\',\'High\'],SIZE).tolist(),
    \'D\': np.random.normal(100, 10, size=(SIZE)).tolist()
    })

# iteritems(),每个列作为键,将值与值作为键和列值迭代为Series对象
print(\'iteritems:\')
for key, value in data .iteritems():
    

					
				
收藏 打印
您的足迹: