python数据处理

本文介绍了Python中使用Matplotlib进行图形绘制的基础,如创建画布、添加内容以及保存和显示图像。同时,详细展示了Pandas库中Series和DataFrame的操作,包括创建、索引、数据提取、排序、合并以及处理缺失值的方法。此外,还涵盖了数据统计摘要和基于特定条件的数据筛选。文章通过实例代码展示了如何进行数据处理和简单的数据分析工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本篇只是涉及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创建默认的整数索引: 创建Seriess,使得其值为:

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 对数据进行提取:

  1. 提取索引为‘b’的数据
  2. 提取列'A'和‘B’的数据
  3. 提取索引为‘b’至‘c’且列为‘B’和‘C’的数据
    print(df.loc['b'])
    print()
    print(df.loc[:,['A','B']])
    print()
    print(df.loc['b':'c','B':'C'])

3.10 对数据进行提取

  1. 提取第三行的数据
  2. 提取前三列的数据
  3. 提取第一、二、四行的第一、二列的数据
  4. 提取第一行第一列的数据
    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 对数据进行提取:

  1. 提取列‘A’的值大于0的数据
  2. 提取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')

感谢各位阅读~ 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南城`烟雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值