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天时间对象