本篇只是涉及python数据处理的部分函数及实际例子,具体函数如何实现怎么实现还需各位读者仔细研究。
1. Matplotlib绘图基础
- 1-1 创建画布与子图
plt.figure 用来构建一张空白的画布,并能够将整个画布划分为多个部分,用来绘制多个图形。 figure.add_subplot 用来创建并选中子图。
(1)Matplotlib的图像都位于Figure对象中。你可以用plt.figure创建一个画布。
(2)不能通过空的画布绘图。必须用add_subplot创建一个或多个subplot。
① 例如创建一个画布,在此画布上创建2×2的4个子图,分别命名为ax1、ax2、ax3和ax4:
import matplotlib.pyplot as plt fig=plt.figure() ax1=fig.add_subplot(2,2,1) ax2=fig.add_subplot(2,2,2) ax3=fig.add_subplot(2,2,3) ax4=fig.add_subplot(2,2,4) plt.show()
- 1-2 添加画布内容、保存绘图并显示
② 例如,绘制2个子图,并为每个子图添加相应的标题、x和y轴的名称、范围及刻度、图例,将子图命名为figure1,保存在figure文件中,最后显示子图:
import numpy as np fig=plt.figure(figsize=(8,8)) ax1=fig.add_subplot(2,2,1) ax2=fig.add_subplot(2,2,2) x=np.linspace(0,2,10) y=np.sin(x) ax1.plot(x,y,c='red',label='rule') ax2.plot(x,y,c='green',label='rule') ax1.set_title("1") ax2.set_title("2") ax1.set_xlabel('x') ax1.set_ylabel('y') ax2.set_xlabel('x') ax2.set_ylabel('y') ax1.set_xlim(0,2) ax1.set_ylim(0,2) ax2.set_xlim(0,2) ax2.set_ylim(0,2) ax1.set_xticks(np.arange(0,2,0.2)) ax1.set_yticks(np.arange(0,2,0.2)) ax2.set_xticks(np.arange(0,2,0.2)) ax2.set_yticks(np.arange(0,2,0.2)) ax1.legend(loc='best') ax2.legend(loc='best') plt.savefig('./figure1')
2. Pyplot中的常用绘图
2-1 绘制折线图
2-2 绘制饼图
2-3 绘制箱线图
fig=plt.figure(figsize=(8,8)) ax1=fig.add_subplot(2,2,1) x=np.linspace(0,2,10) y=np.sin(x) ax1.plot(x,y,c='red',label='rule') plt.show() labels1='1','2','3','4' size1=[10,25,30,18] plt.pie(size1,labels=labels1,autopct='%1.1f%%',shadow=False,startangle=100) plt.show() plt.boxplot(range(10)) plt.show()
3.数据处理
3.1.导入NumPy、Pandas、Matplotlib库:
import numpy as np import pandas as pd import matplotlib.pyplot as plt
3.2通过列表来创建
Series
,让Pandas
创建默认的整数索引: 创建Series
s,使得其值为:0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64
list=[1.0,3.0,5.0,0,6.0,8.0] s=pd.Series(list) s[3]='NaN' s
3.3 创建如下所示的
DataFrame
,并将其赋值给变量df:设置相应的行索引和列索引,值为随机生成的随机数。
A B C D a 0.469112 -0.282863 -1.509059 -1.135632 b 1.212112 -0.173215 0.119209 -1.044236 c -0.861849 -2.104569 -0.494929 1.071804 d 0.721555 -0.706771 -1.039575 0.271860 e -0.424972 0.567020 0.276232 -1.087401 f -0.673690 0.113648 -1.478427 0.52498
df=pd.DataFrame(np.random.randn(6,4),index=['a','b','c','d','e','f'],columns=['A','B','C','D']) df
3.4 查看df前2条和后2条的数据。
print(df.head(2)) display(df.tail(2))
3.5 查看df的索引,使其输出:
DatetimeIndex(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
df.index
3.6查看df的列,使其输出:
Index(['A', 'B', 'C', 'D'], dtype='object')
df.columns
3.7 输出df各列数据的统计值摘要,包括(个数、平均数、标准差、最小值、最大值等),使其输出为:
A B C D count 6.000000 6.000000 6.000000 6.000000 mean 0.073711 -0.431125 -0.687758 -0.233103 std 0.843157 0.922818 0.779887 0.973118 min -0.861849 -2.104569 -1.509059 -1.135632 25% -0.611510 -0.600794 -1.368714 -1.076610 50% 0.022070 -0.228039 -0.767252 -0.386188 75% 0.658444 0.041933 -0.034326 0.461706 max 1.212112 0.567020 0.276232 1.071804
df.describe()
3.8 以
B
列的值作为排序的依据,对df进行升序排序。df.sort_values(by='B',ascending=[True])
3.9 对数据进行提取:
- 提取索引为‘b’的数据
- 提取列'A'和‘B’的数据
- 提取索引为‘b’至‘c’且列为‘B’和‘C’的数据
print(df.loc['b']) print() print(df.loc[:,['A','B']]) print() print(df.loc['b':'c','B':'C'])
3.10 对数据进行提取
- 提取第三行的数据
- 提取前三列的数据
- 提取第一、二、四行的第一、二列的数据
- 提取第一行第一列的数据
print(df.iloc[3,:]) print() print(df.iloc[:,0:3]) print() print(df.iloc[[1,2,4],[1,2]]) print() print(df.iloc[[1],[1]])
3.11 对数据进行提取:
- 提取列‘A’的值大于0的数据
- 提取df中大于0的数据
print(df.loc[df['A']>0]) print() print(df[df>0])
在df中添加列‘E’:
df1 = df.copy() df1['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
并提取出df1列‘E’中为two或者four的数据:
print(df1[(df1['E']=='two')|(df1['E']=='four')])
3.12 复制df,并为其增加一列‘E’,列‘E’的前三行值为1,后三行值为缺失值命名为df2。Pandas主要使用值
np.nan
表示缺失值。 默认情况下,它不包括在计算中。df2 = df.copy() df2['E'] = [1,1,1,np.NaN,np.NaN,np.NaN] df2
3.13检测
df2
中的缺失值:df2.isnull()
3.14 删除 df2 中包含任何缺失值的行:
df2.dropna()
3.15 使用
0
填充df2
中的所有缺失值:df2.fillna(0)
3.16 在连接/合并类型操作的情况下,pandas提供了各种功能,可轻松地将Series和DataFrame对象与各种用于索引和关系代数功能的集合逻辑组合在一起。
将
pandas
对象与concat()
串联在一起:df = pd.DataFrame(np.random.randn(10,4)) pieces = [df[:3], df[3:7], df[7:]] pieces
上文创建了一个形状为(10,4)的随机数dataframe对象,并通过索引切分方法将数据分为三个子片段。 选择合适的函数并通过代码实现将pieces中的数据进行合并还原。
pd.concat(pieces)
3.17 接下来使用dict形式分别创建两个dataframe对象left和right,进行以下操作。
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]}) right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]}) display(left,right)
选择合适的函数并通过代码实现将left和right以列‘key’为索引进行合并,合并方式为inner
pd.merge(left,right,on='key',how='inner')
3.18 创建DataFrame对象,命名为df3,选择合适的函数并通过代码实现将s追加至df3最末行,其中s为df3的第三行数据。
df3 = pd.DataFrame(np.random.randn(8, 4), columns=['A', 'B', 'C', 'D']) df3 df4=pd.DataFrame(df3.loc[2]) df5=df4.T df3.append(df5)
3.19 通过“分组依据”,我们指的是涉及以下一个或多个步骤的过程:
创建df4
(1)根据某些标准将数据分成组。
df4 = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'], 'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'], 'C': np.random.randn(8), 'D': np.random.randn(8)}) df4
① 实现将df4以列‘A’、‘B’为索引进行分组,并显示分组后的各列的总和。
df4.groupby(by=['A','B']).sum()
② 实现将df4以列‘A’、‘B’为索引进行分组,并显示分组后的'C'列的总和。
grouped_df=df4.groupby(by=['A','B']) grouped_df['C'].sum()
(2)为df4设置索引:
① 设置df4的索引为‘A'。
② 设置df4的索引为‘A’和‘B’,即设置多重索引。
print(df4.set_index(keys='A')) print() print(df4.set_index(keys=['A','B']))
3.20 取出df4中列‘C’的值进行绘图,图大致如下所示:
图中应包含标题、轴名称、横纵坐标、及曲线标识legend。
dfc=df4['C'] fig=plt.figure(figsize=(8,8)) ax1=fig.add_subplot(2,2,1) ax1.plot(dfc,c='red',label='rule') plt.title('Dfc') ax1.set_xlabel('x') ax1.set_ylabel('y') plt.legend('C')
感谢各位阅读~