Python操作DataFrame的常用操作
- Python操作DataFrame的常用操作
- 一、连接数据库并读取数据(代码3 - 9)
- 二、查看DataFrame的元素个数、维度数、形状(代码3 - 10)
- 三、DataFrame转置(代码3 - 11)
- 四、使用字典访问和属性访问方式取出某一列(代码3 - 12、3 - 13)
- 五、取出某列或某几列的前几个元素(代码3 - 14、3 - 15)
- 六、取出DataFrame的某几行元素(代码3 - 16)
- 七、查看DataFrame的前几行和后几行数据(代码3 - 17)
- 八、使用loc()和iloc()方法提取数据(代码3 - 18、3 - 19、3 - 20)
- 九、传入表达式提取数据(代码3 - 21、3 - 22)
- 十、更改DataFrame中的数据(代码3 - 23)
- 十一、转换为时间序列数据并新增列(代码3 - 24、3 - 25)
- 十二、删除DataFrame的列或行(代码3 - 26、3 - 27)
- 十三、计算平均值、描述性统计和频数统计(代码3 - 28、3 - 29、3 - 30、3 - 31)
- 十四、转变数据类型并进行描述统计(代码3 - 32、3 - 33)
- 总结
Python操作DataFrame的常用操作
在Python中,pandas
库的DataFrame
是一个非常强大的数据结构,常用于数据处理和分析。本文将详细介绍DataFrame
的常用操作,并提供相应的代码示例。
一、连接数据库并读取数据(代码3 - 9)
# 代码3-9
from sqlalchemy import create_engine
import pandas as pd
# 创建数据库连接
engine = create_engine('mysql+pymysql://root:1234@127.0.0.1:3306/testdb?charset=utf8')
musicdata = pd.read_sql_table('musicdata', con=engine)
print('音乐行业收入信息表的索引为:', musicdata.index)print('音乐行业收入信息表的所有值为:\n', musicdata.values)print('音乐行业收入信息表的列名为:\n', musicdata.columns)print('音乐行业收入信息表的数据类型为:\n', musicdata.dtypes)
代码解析:
首先,使用sqlalchemy
库的create_engine
函数创建一个数据库连接引擎,连接到指定的MySQL数据库。然后,使用pandas
的read_sql_table
函数从数据库中读取名为musicdata
的表,并将其存储在musicdata
这个DataFrame
对象中。接着,分别打印出该DataFrame
的索引、所有值、列名和数据类型。
二、查看DataFrame的元素个数、维度数、形状(代码3 - 10)
# 代码3-10
# 查看DataFrame的元素个数、维度数、形状
print('音乐行业收入信息表的元素个数为:', musicdata.size)
print('音乐行业收入信息表的维度数为:', musicdata.ndim)
print('音乐行业收入信息表的形状为:', musicdata.shape)
代码解析:
通过DataFrame
的size
属性可以获取其元素的总个数,ndim
属性可以获取其维度数(DataFrame
是二维的,所以通常为2),shape
属性可以获取其形状,即行数和列数。
三、DataFrame转置(代码3 - 11)
# 代码3-11
print('音乐行业收入信息表转置前形状为:', musicdata.shape)
print('音乐行业收入信息表转置后形状为:', musicdata.T.shape)
代码解析:
DataFrame
的T
属性可以将其进行转置操作,即行和列互换。这里先打印转置前的形状,再打印转置后的形状,方便对比。
四、使用字典访问和属性访问方式取出某一列(代码3 - 12、3 - 13)
# 代码3-12
# 使用字典访问的方式取出musicdata中的某一列
format = musicdata['format']
print('音乐行业收入信息表中的format的形状为:', format.shape)# 代码3-13
# 使用访问属性的方式取出musicdata中的number_of_records
number_of_records = musicdata.number_of_records
print('音乐行业收入信息表中的number_of_records的形状为:', number_of_records.shape)
代码解析:
可以使用字典访问方式(如musicdata['format']
)或属性访问方式(如musicdata.number_of_records
)来获取DataFrame
中的某一列。这里分别获取了format
列和number_of_records
列,并打印它们的形状。
五、取出某列或某几列的前几个元素(代码3 - 14、3 - 15)
# 代码3-14
metric5 = musicdata['metric'][:5]
print('音乐行业收入信息表中的metric前5个元素为:\n', metric5)# 代码3-15
format_metric = musicdata[['format', 'metric']][:5]
print('音乐行业收入信息表中的format和metric前5个元素为:\n', format_metric)
代码解析:
通过切片操作可以获取某列或某几列的前几个元素。代码3 - 14获取了metric
列的前5个元素,代码3 - 15获取了format
和metric
两列的前5个元素。
六、取出DataFrame的某几行元素(代码3 - 16)
# 代码3-16
musicdata5 = musicdata[:][1:6]
print('音乐行业收入信息表的1~6行元素为:\n', musicdata5)
代码解析:
使用切片操作[1:6]
可以获取DataFrame
的第2行到第6行的元素。
七、查看DataFrame的前几行和后几行数据(代码3 - 17)
# 代码3-17
print('音乐行业收入信息表中前5行数据为:\n', musicdata.head())print('音乐行业收入信息表中后5行元素为:\n', musicdata.tail())
代码解析:
DataFrame
的head()
方法可以查看其前几行数据(默认是前5行),tail()
方法可以查看其后几行数据(默认是后5行)。
八、使用loc()和iloc()方法提取数据(代码3 - 18、3 - 19、3 - 20)
# 代码3-18
format1 = musicdata.loc[:, 'format']
print('使用loc()方法提取format列的size为:', format1.size)format2 = musicdata.iloc[:, 3]
print('使用iloc()方法提取第3列的size为:', format2.size)# 代码3-19
format_metric1 = musicdata.loc[:, ['format', 'metric']]
print('使用loc()方法提取format和metric列的size为:', format_metric1.size) format_metric2 = musicdata.iloc[:, [1, 3]]
print('使用iloc()方法提取第1和第3列的size为:', format_metric2.size)# 代码3-20
print('列名为format和metric的行名为3的数据为:\n',musicdata.loc[3, ['format', 'metric']])print('列名为format和metric行名为2,3,4,5,6的数据为:\n',musicdata.loc[2: 6, ['format', 'metric']])print('列位置为1和3,行位置为3的数据为:\n', musicdata.iloc[3, [1, 3]])print('列位置为1和3,行位置为2,3,4,5,6的数据为:\n',musicdata.iloc[2: 7, [1, 3]])
代码解析:
loc()
方法是基于标签进行索引的,iloc()
方法是基于位置进行索引的。代码3 - 18和3 - 19分别使用这两种方法提取列数据,代码3 - 20则使用这两种方法提取指定行和列的数据。
九、传入表达式提取数据(代码3 - 21、3 - 22)
# 代码3-21
# 传入表达式
print('musicdata中metric为“Units”的format为:\n',musicdata.loc[musicdata['metric'] == 'Units', ['format', 'metric']])print('musicdata中metric为“Units”的第1、4列数据为:\n',musicdata.iloc[musicdata['metric'] == 'Units', [1, 4]])# 代码3-22
print('musicdata中metric为“Units”的第1、4列数据为:\n',musicdata.iloc[(musicdata['metric'] == 'Units').values, [1, 4]])
代码解析:
可以在loc()
或iloc()
方法中传入布尔表达式来筛选数据。代码3 - 21和3 - 22分别使用这两种方法筛选出metric
为Units
的相关数据。
十、更改DataFrame中的数据(代码3 - 23)
# 代码3-23
# 将format值为CD的变换为数值1
print('更改前musicdata中format为CD的数据为:\n',musicdata.loc[musicdata['format'] == 'CD', 'format'])
musicdata.loc[musicdata['format'] == 'CD', 'format']=1
print('更改后musicdata中format为1的数据为:\n',musicdata.loc[musicdata['format'] == 1, 'format'])
代码解析:
使用loc()
方法可以定位到满足条件的数据,并对其进行修改。这里将format
列中值为CD
的数据修改为1。
十一、转换为时间序列数据并新增列(代码3 - 24、3 - 25)
# 代码3-24
# 转换为时间序列数据
dates = pd.to_datetime(musicdata['date'])
# 建立月份列
musicdata['month'] = dates.map(lambda x: x.month)
# 查看前5行
print('musicdata新增列month的前5行为:\n', musicdata['month'].head())# 代码3-25
musicdata['day'] = 15
print('musicdata新增列day的前5行为:\n', musicdata['day'].head())
代码解析:
代码3 - 24先将date
列转换为时间序列数据,然后使用map()
方法提取月份信息,并将其作为新列month
添加到DataFrame
中。代码3 - 25则直接添加一个值全为15的新列day
。
十二、删除DataFrame的列或行(代码3 - 26、3 - 27)
# 代码3-26
print('删除day前musicdata的列索引为:\n', musicdata.columns)
musicdata.drop(labels='day', axis=1, inplace=True)
print('删除day后musicdata的列索引为:\n', musicdata.columns)# 代码3-27
print('删除1~3行前musicdata的长度为:', len(musicdata))
musicdata.drop(labels=range(1, 4), axis=0, inplace=True)
print('删除1~3行后musicdata的长度为:', len(musicdata))
代码解析:
DataFrame
的drop()
方法可以用于删除指定的列或行。axis=1
表示删除列,axis=0
表示删除行,inplace=True
表示在原DataFrame
上进行修改。
十三、计算平均值、描述性统计和频数统计(代码3 - 28、3 - 29、3 - 30、3 - 31)
# 代码3-28
import numpy as np
print('音乐行业收入信息表中number_of_records的平均值为:', np.mean(musicdata['number_of_records']))# 代码3-29
print('音乐行业收入信息表中number_of_records的平均值为:', musicdata['number_of_records'].mean())# 代码3-30
print('音乐行业收入信息表value_actual的描述性统计为:\n',musicdata['value_actual'].describe())
# 代码3-31
print('音乐行业收入信息 表format频数统计前6行结果为:\n',musicdata['format'].value_counts()[:6])
代码解析:
代码3 - 28和3 - 29分别使用numpy
的mean()
函数和DataFrame
的mean()
方法计算number_of_records
列的平均值。代码3 - 30使用describe()
方法对value_actual
列进行描述性统计,代码3 - 31使用value_counts()
方法对format
列进行频数统计。
十四、转变数据类型并进行描述统计(代码3 - 32、3 - 33)
# 代码3-32
musicdata['metric'] = musicdata['metric'].astype('category')
print('音乐行业收入信息表metric列转变数据类型后为:',musicdata['metric'].dtypes) # 代码3-33
print('音乐行业收入信息表metric的描述统计结果为:\n',musicdata['metric'].describe())
代码解析:
代码3 - 32使用astype()
方法将metric
列的数据类型转换为category
类型,代码3 - 33对转换后的数据类型进行描述统计。
总结
通过本文的学习,你掌握了Python中pandas
库的DataFrame
的多种常用操作,包括连接数据库读取数据、查看基本信息、数据提取、数据修改、新增和删除列或行、数据统计等。这些操作在实际的数据处理和分析中非常有用,能够帮助你更高效地处理和分析数据。