Python库入门(一)——numpy, pandas, matplotlib

目录

 

numpy

1. 简介

2. 导入

3. 初始化

(1)一般形式

(2)特殊形式

4. 属性

5. 基础运算

(1) 算数运算

(2)比较运算

(3)矩阵运算

(4)其他运算

6. 索引

7. 合并

8. 分割

pandas

1. 简介

(1)操作对象

(2)优势

(3)兼容格式

2. 导入

3. 选择数据

4. 设置数据

5. 处理丢失数据

6. 导入导出数据

7. 合并操作

8. 数据可视化(与matlibplot结合)


numpy

1. 简介

(1)应用优势

快速:因为基于c语言,并且应用到了矩阵的计算,所以要比python中自带的list或者dict要快很多。

numpy类似于list,pandas类似dict,基于numpy是其升级版本。

(2)假如有matlab基础可以很容易入手。

2. 导入

import numpy as np

3. 初始化

(1)一般形式

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

dtype包括int(默认int64)、float(默认float64)等;

举例:

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6]])

(2)特殊形式

np.zeros(shape)

np.ones(shape)

np.empty(shape)

np.arange(start, end, step).reshape(shape)  # 类似range()

np.linspace(start, end, size).reshape(shape)

import numpy as np

print(np.ones([1, 2]))

注:注意shape是一个列表,而不是两个参数。

4. 属性

np.array()创建的对象的属性包括维数(dimension)、形状(shape)、大小(size)

举例:

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6]])
print(arr.ndim)  # 2
print(arr.shape)  # (2, 3) 
print(arr.size)  # 6

5. 基础运算

(1) 算数运算

+-*/ ** 是矩阵中的数字逐个进行运算。

(2)比较运算

> < >= <= == 返回bool矩阵

假如需要整型矩阵,那么采用以下方法转换为int类型:

https://ask.helplib.com/python/post_1052836

(3)矩阵运算

np.dot(arr1, arr2)  # arr1.*arr2

(4)其他运算

np.sum(arr, axis) np.min(arr, axis) np.max(arr, axis)

np.argmin(arr)/np.argmax(arr)  # 返回最小/最大值的索引

np.mean(arr)/np.average(arr)  # 求平均值

np.median(arr)  # 返回中位数

np.cumsum(arr)  # 累加,返回的不是一个数,而是一个矩阵,代表该位置之前的所有数值加和。

np.diff(arr)  # 累差,返回一个n*(m-1)的矩阵,每一个位置代表前一个位置数值与原矩阵该位置数值之差。

np.nonzero(arr)  # 返回非零数值的索引。结果是两个矩阵,第一个矩阵是行索引,第二个矩阵是列索引。

np.sort(arr)  # 返回矩阵每行从小到大排序后的结果。注意不是所有矩阵排序。

np.transpose(arr)  # 返回矩阵的转置矩阵。同arr.T。

np.clip(arr, min, max)  # 将矩阵中大于max的值重置为max,将矩阵中小于min的值重置为min,处于两者之间的保留原样。

6. 索引

类似于二维列表的索引。

与众不同的地方:

(1)A[1][2]可以写作A[1, 2]

(2)A[:, 2]代表的是第二列

tricky:

(1)想要迭代列

for col in A.T:

     print(col)

(2)想要迭代每一项

for item in A.flat:

    print(item)

注:A.flatten()返回一个一维数组,A.flat返回迭代器.

7. 合并

np.vstack(arr1, arr2)  # 垂直合并

np.hstack(arr1, arr2)  # 水平方向合并

np.concatenate((arr1, arr2), axis=0/1)  # 指定方向的合并

注:这里有一个坑,假如A是一维行向量,比如[1, 2, 3],那么A.T仍然是[1, 2, 3],因为认为现在的A是一个列表。

如果要变成一维列向量,需要A[:, np.newaxis].

8. 分割

np.split(ary, indices_or_sections, axis=0)  # 把数组分成indices_or_sections份等分的数组。

np.array_split(ary, indices_or_sections, axis=0)  # 允许数组不等分。具体划分方式如下:For an array of length l that should be split into n sections, it returns l % n sub-arrays of size l//n + 1 and the rest of size l//n

pandas

1. 简介

(1)操作对象

Series:一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。本质上是一个NumPy的数组。没有为数据指定索引时,会自动创建一个0到N-1(N为长度)的整数型索引。基本操作参见:https://blog.csdn.net/zutsoft/article/details/51482573

Dataframe:表格型的数据结构。每列可以是不同的值类型(数值,字符串,布尔值等)。可以被看做由Series组成的大字典。基本操作参见:https://blog.csdn.net/u014281392/article/details/75331570

创建对象:

df1 = pd.Dataframe(arr, columns=[], index=[])  # index是指行索引。

df2 = pd.DataFrame({'col1':[],'col2':[]},index=[])

对象属性:

df.index

df.columns

df.values  # 返回没有索引的Numpy数组

df.dtypes  # 输出每一列的类型

操作函数:

df.describe()  # 返回一些统计学数据,只会运算数字列

df.transpose()  # 转置矩阵,相当于df.T

df.sort_index(axis=0/1, ascending=True/False)  # 按照行/列索引进行排序

df.sort_values(by=[], axis=0, ascending=True)  # 将指定行、列按照值进行排序

(2)优势

能够快速的处理电子表格格式的数据,同时具有强大的io功能,处理多种数据类型和转换

(3)兼容格式

xlsxlsx、文本文件、csv、hdf文件、xml、html

2. 导入

import pandas as pd

3. 选择数据

(1)df.loc[]  # 按照标签访问数据。所谓标签,指的是不能按照0-n-1的编号,而是按照指定的名称访问。

举例:

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
print(df)
print(df.loc[:, 'col1':'col2'])

(2)df.iloc[]  # 按照位置访问数据。

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
print(df)
print(df.iloc[1:2, 1:2])

(3)df.ix[]  # 混合前两种的索引方式。Python3已经弃用。

(4)df[]

访问列数据:

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
print(df)
print(df.columns[1:3])
print(df[df.columns[1:3]])
print(df[['col2', 'col3']])

需要使用标签数组,具体参见最后一个。

访问行数据:

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
print(df)
print(df[0:1])
print(df['row1':'row3'])
# print(df[0]) # 报错
# print(df['row1']) # 报错

可以使用标签或者位置的切片访问,不能使用数组。

4. 设置数据

(1)选择某个数据然后赋值

具体参见上述选择数据的方式,比如:

df.iloc[2, 2] = 111

(2)对于满足某种条件的数据进行赋值

df[df > 2] = 222

(3)对于不存在的列进行赋值,可以创造出新的列

df['E'] = np.nan

5. 处理丢失数据

处理丢失数据的方式有以下两种:

(1)丢掉具有NaN的行或者列

df.dropna(axis=0/1, how='all'/'any')  # 若是how为'all',那么为相应行或者列全部都是NaN时候会丢掉该行或者该列。若是how为'any',那么为相应行或者列只要包含一个及以上的NaN,就丢弃。

(2)将丢失数据部分填充为指定的值。

df.fillna(value=0)  # 将NaN的部位填充为指定的value。

(3)测试是否有丢失数据

注:使用函数np.any()检查是否存在某个值。

print(np.any(np.isnull()))

6. 导入导出数据

read_xxx()  # 读取xxx格式的文件。xxx是指数据格式。

to_xxx()  # 保存成xxx格式的文件。

7. 合并操作

因为暂时此次task用不到,所以留个坑之后填。

8. 数据可视化(与matlibplot结合)

(1) import头文件

import matlibplot.pyplot as plt

(2) 绘图基本操作

绘图的方式有许多个,每一种对应不同的图类型,比如'bar','hist','box','area'等等。

plt.show()  # 注意只有show之后图片才能显示出来。

常用函数一:data.plot() 绘制曲线图

如果data是Series,那么显示出一条曲线,以index为横坐标,以value为纵坐标。如果data是DataFrame,那么每一列显示出一条曲线,每一条曲线的横坐标为index,每一条曲线的纵坐标为相应列的value。

常用函数二:data.scatter()绘制散点图

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
ax = df.plot.scatter(x='col1', y='col2', color='DarkBlue', label='Class1')
df.plot.scatter(x='col1', y='col3', color='LightGreen', label='Class2', ax=ax)
plt.show()

猜你喜欢

转载自blog.csdn.net/Rosalind_Xu/article/details/86756669