数据分析之----NumPy和Pandas

Numpy中文文档

numpy使用

Numpy是高性能科学计算和数据分析的基础包.

Numpy的主要功能:

    • ndarray,一个多维数组结构,高效且节省空间
    • 无需循环对整组数据进行快速运算的数学函数
    • *读写磁盘数据的工具以及用于操作内存映射文件的工具
    • *线性代数、随机数生成和傅里叶变换功能
    • *用于集成C、C++等代码的工具

创建ndarray数组对象

np.array([1,2,3])

np.arange()            # 和python的range()一样,生成数组

np.linspace(0,10,5)   # 返回间隔均匀的数组,第三个参数是生成样本的个数。

np.zeros([3,5])        # 根据指定形状,创建全0数组

np.ones([3,5])         # 根据指定形状,创建全1数组

np.empty([2, 2], dtype=int)  #根据指定形状和dtype创建空数组(随机值)

ndarray的索引和切片

# 运算
a=np.arange(5)
a + 1

# 索引
a1 = np.array([[1,2,3],[4,5,6,],[7,8,9]])
a1[1][0]  # 4
a1[1,0]   # 4

# 切片(与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组)
a = np.arange(5)
b = a[:3]         # 此时是浅拷贝
b = a[:3].copy()  # 此时是深拷贝

Numpy:布尔型索引

# 1.布尔型索引
a = np.array([1,4,7,9,14,18])

a>5     # [False, False,  True,  True,  True,  True] 
a[a>5]  # [7,9,14,18]

# 2.与和或
a[(a>5) & (a%2==0)]   # [14, 18]
a[(a>5) | (a%2==0)]   # [ 4,  7,  9, 14, 18]

花式索引

a = np.arange(10)

# 选出其第1,3,4,6,7个元素
a[[1,3,4,6,7]]

# 对一个二维数组,选出其第一列和第三列,组成新的二维数组。
a[:,[1,3]] # 在多维数组中,a[代表行,代表列]

NumPy通用函数

import math
abs,sqrt


ceil  # 向上去整
	np.ceil(3.5)   # 4.0
	np.ceil(-3.5   # -3.0
	
floor # 向下取整
	np.floor(3.5)  # 3
	np.floor(-3.5) # -4	
	
trunc # 向零取整
	np.trunc(-3.5)  # -3.0
	np.trunc(3.5)   # 3.0	
	
modf  
	a = np.array([1.1,2.2,3.3]) # [1.1, 2.2, 3.3]
	np.modf(a)  # [0.1, 0.2, 0.3],[1.0, 2.0, 3.0]

isnan
	np.isnan(np.nan)  # True
	np.isnan(0)       # False
	
isinf # 无限大 infinit
	a = np.array([1,2,3])
	b = np.array([0,2,3])
	c = a/b         # [ inf, 1, 1]
	np.isinf(c[0])  # True
	  
  

random随机数

rand		给定形状产生随机数组(0到1之间的数)
randint		给定形状产生随机整数
choice		给定形状产生随机选择
shuffle		与random.shuffle相同
uniform		给定形状产生随机数组

pandas

  • pandas是一个强大的Python数据分析的工具包。

  • pandas是基于NumPy构建的。

  • pandas的主要功能

    • 具备对其功能的数据结构DataFrame、Series
    • 集成时间序列功能
    • 提供丰富的数学运算和操作
    • 灵活处理缺失数据
  • 安装方法:pip install pandas

  • 引用方法:import pandas as pd

    pandas:Series

Series是一种类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。

创建Series对象

In [37]: pd.Series([1,3,5,7,9],index=["a","b","c","d","e"])
Out[37]: 
a    1
b    3
c    5
d    7
e    9


In [39]: pd.Series({"a":1,"b":2})
Out[39]: 
a    1
b    2

数据对齐

a1 = pd.Series([1,2,3], index=["c","a","d"]) 
 
a3 = pd.Series([2,4,6,8], index=list("abcd"))
 
In [58]: a4 = a1+a3
Out[58]: 
a     4.0
b     NaN
c     7.0
d    11.0

# NaN(Not a Number)来表示缺失数据
# 处理缺失数据的方法
 
a4.dropna()  # 舍弃值为NaN的行
a4.fillna(0) # 填充缺失数据
a4[a4.notnull()] # 舍弃
a4[a4.isnull()] #
 

DataFrame对象

  • DataFrame是一个表格型的数据结构,含有一组有序的列。

  • DataFrame可以被看做是由Series组成的字典,并且共用一个索引。

创建DataFrame对象

# 1.手动创建
df = pd.DataFrame({
  	"one":pd.Series([1,2,3], index=["a","b","c"]),
  	"two":pd.Series([1,2,3,4], index=[list("abcd")])
  })
  
out:
 one  two
a  1.0    1
b  2.0    2
c  3.0    3
d  NaN    4


# 2.读取csv文件
df = pd.read_csv("filename.csv")

df.index    # 获取索引
df.T        # 矩阵转置
df.columns  # 获取列索引
df.values   # 把值读成多维数组

df.sort_index(axis=0,ascending=True)  
# axis=0按列进行排序,axis=1按行进行排序,ascending=True 升序排列

df.sort_values(by=["close"], ascending=True,inplace=True)
# 按照"close"进行升序排列,inplace=True,表示覆盖原来的df数据。


# 3.DataFrame索引和切片,loc和iloc下 [表示行,表示列]
df["close"]   # DataFrame对象变Series对象
df[["close","open"]]

# 4. loc
df.loc[0:10,['close','open']] # 取0-10行索引,列字段"close","open"

# 5. iloc
df.iloc[3]        # 取第三行数据
df.iloc[3,3]      # 取第三行,第三列那个值
df.iloc[0:3,4:6]  # 取0,1,2行 和 4,5列 

# 6.DataFrame常用方法
df1.applymap(lambda x: x+1)  # 将每个数据都加1

pandas从文件读取

1.从文件读取
pd.read_csv("filename.csv") # 默认分割符为 ","
pd.read_table()             #默认分割符为 	

# 可加的参数
sep		    指定分隔符,可用正则表达式如's+'
header=None	指定文件无列名,默认填充0,1,2,3
names		指定列名
index_col	指定某列作为行索引
na_values	指定某些字符串表示缺失值
parse_dates	指定某些列是否被解析为日期,传布尔值或列表

df = pd.read_csv("601318.csv",index_col="date",parse_dates=True,na_values=["None","NaN"])



# 2.从文件写入
to_csv("filename.csv")   # 自动加一列索引列

sep
na_rep		指定缺失值转换的字符串,默认为空字符串
header=False	不输出列名一行
index=False	不输出行索引一列
cols=["close","open"]		指定输出的列,传入列表

pandas:时间对象处理

# 1.处理字符串时间
import dateutil
In [172]: dateutil.parser.parse("2013-03-03")
Out[172]: datetime.datetime(2013, 3, 3, 0, 0)

# 2.产生时间对象数组
pd.date_range("2017-07-01", "2017-08-31",freq="B")

# freq 时间频率,默认为'D',可选H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),…
	
pd.date_range("2017-07-01", periods=100)  #  产生100天时间对象
原文地址:https://www.cnblogs.com/zouruncheng/p/7406451.html