数据分析之----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()             #默认分割符为 \t

# 可加的参数
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值