强基初中数学&学Python——第235课 数字和数学第三方模块NumPy:菜鸟入门(11)


导入和导出CSV  读取包含现有信息的CSV(一般特指非NumPy导出的)很简单。最好、最简单的方法是使用pandas模块(附录1)。music.csv文件附录2。

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

>>> import pandas as pd>>> #如果所有列的类型相同:>>> x = pd.read_csv('music.csv', header=0).values>>> print(x)[['Billie Holiday' 'Jazz' 1300000 27000000] ['Jimmie Hendrix' 'Rock' 2700000 70000000] ['Miles Davis' 'Jazz' 1500000 48000000] ['SIA' 'Pop' 2000000 74000000]]>>> x = pd.read_csv('music.csv').values #header=0(即第一行是表格栏目标题)是默认值>>> print(x)[['Billie Holiday' 'Jazz' 1300000 27000000] ['Jimmie Hendrix' 'Rock' 2700000 70000000] ['Miles Davis' 'Jazz' 1500000 48000000] ['SIA' 'Pop' 2000000 74000000]]>>> #还可以随意获取某些列:>>> x = pd.read_csv('music.csv', usecols=['Artist', 'Plays']).values>>> print(x)[['Billie Holiday' 27000000] ['Jimmie Hendrix' 70000000] ['Miles Davis' 48000000] ['SIA' 74000000]]

  使用Pandas导出数组也很简单。如果用户是NumPy的新手,可能需要从数组中的值创建Pandas数据帧(dataframe),然后使用Pandas将数据帧写入CSV文件。  例如下面的数组“a”

· 

· 

· 

· 

>>> a = np.array([[-2.58289208,  0.43014843, -1.24082018, 1.59572603],...               [ 0.99027828, 1.17150989,  0.94125714, -0.14692469],...               [ 0.76989341,  0.81299683, -0.95068423, 0.11769564],...               [ 0.20484034,  0.34784527,  1.96979195, 0.51992837]])

  根据这个数组创建Pandas数据帧:

· 

· 

· 

· 

· 

· 

· 

>>> df = pd.DataFrame(a)>>> print(df)          0         1         2         30 -2.582892  0.430148 -1.240820  1.5957261  0.990278  1.171510  0.941257 -0.1469252  0.769893  0.812997 -0.950684  0.1176963  0.204840  0.347845  1.969792  0.519928

  很容易地按下面的方法把数据帧保存到文件:

· 

>>> df.to_csv('pd.csv')

  保存后可以用下面的方法读出这CSV文件:

· 

· 

· 

· 

· 

· 

· 

>>> data = pd.read_csv('pd.csv')>>> data   Unnamed: 0         0         1         2         30           0 -2.582892  0.430148 -1.240820  1.5957261           1  0.990278  1.171510  0.941257 -0.1469252           2  0.769893  0.812997 -0.950684  0.1176963           3  0.204840  0.347845  1.969792  0.519928

  当然,也可以用NumPy的savetxt函数保存数组:

· 

>>> np.savetxt('np.csv', a, fmt='%.2f', delimiter=',', header='1,  2,  3,  4')

  如果使用的是命令行操作系统,可以随时通过如下的命令查看CSV文件:

· 

· 

· 

· 

· 

· 

$ cat np.csv#  1,  2,  3,  4-2.58,0.43,-1.24,1.600.99,1.17,0.94,-0.150.77,0.81,-0.95,0.120.20,0.35,1.97,0.52

  或者用文本编辑器打开它:
  如果用户有兴趣了解更多关于Pandas的信息,请查看Pandas官方文档(附录1官方网站)。
使用Matplotlib绘制数组  如果需要通过数值绘图,使用Matplotlib(附录3)是非常简单。  例如,如下一个数组:

· 

>>> a = np.array([2, 1, 5, 7, 4, 6, 8, 14, 10, 9, 18, 20, 22])

  导入Matplotlib:

· 

>>> import matplotlib.pyplot as plt

  剩下来的就是运行下面的代码绘图:

· 

· 

· 

>>> plt.plot(a)[<matplotlib.lines.Line2D object at 0x0000025E10040F90>]>>> plt.show()

  又例如,绘制1D数组如下:

· 

· 

· 

· 

· 

· 

· 

>>> x = np.linspace(0, 5, 20)>>> y = np.linspace(0, 10, 20)>>> plt.plot(x, y, 'purple') # 线[<matplotlib.lines.Line2D object at 0x0000025E10041890>]>>> plt.plot(x, y, 'o')      # 点[<matplotlib.lines.Line2D object at 0x0000025E12200150>]>>> plt.show()

  使用Matplotlib,还可以设定大量可视化绘图的选项。

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

>>> fig = plt.figure()>>> ax = fig.add_subplot(projection='3d')>>> X = np.arange(-5, 5, 0.15)>>> Y = np.arange(-5, 5, 0.15)>>> X, Y = np.meshgrid(X, Y)>>> R = np.sqrt(X**2 + Y**2)>>> Z = np.sin(R)>>> ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')<mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x0000025E112C6710>>>> fig.show()

  要了解有关Matplotlib及其功能的更多信息,请查看官方文档(附录3)。
附录1:pandas模块1、安装pandas模块:pip install pandas
2、导入模块:
import pandas as pd
3、官方网站:
https://pandas.pydata.org/
附录2:music.csv文件

· 

· 

· 

· 

· 

Artist,Genre,Listeners,PlaysBillie Holiday,Jazz,1300000,27000000Jimmie Hendrix,Rock,2700000,70000000Miles Davis,Jazz,1500000,48000000SIA,Pop,2000000,74000000


附录3:Matplotlib
1、安装模块:

· 

pip install matplotlib

2、导入绘图:

· 

import matplotlib.pyplot as plt

3、官方网站:

https://matplotlib.org/