Python爬虫-数据处理与存储
数据处理
可以使用pandas模块来实现数据处理,pandas是一个开源的并且通过BSD许可的库。它主要为Python语言提供高性能、易于使用数据结构和数据分析工具,此外还提供了多种数据操作和数据处理方法。由于pandas是第三方模块所以在使用前需要安装并导入该模块。
pandas 数据结构
pandas的数据结构中有两大核心,分别是Series与DataFrame。 其中Series是一维数组,它与Python中基本数据结构List相近。Series可以保存多种数据类型的数据,如布尔值、字符串、数字类型等。DataFrame是一种表格形式的数据结构,类似于Excel表格,是一种二维的表格型数据结构。
1.Series对象
§ 创建Series对象
在创建Series对象时,只需要将数组形式的数据传入Series()构造函数中即可。示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 7:30 PM
# 文件 :Series对象.py
# IDE :PyCharm
# 导入pandas模块
import pandas as pd
# 创建数据数组
data = ['A', 'B', 'C']
# 创建Series对象
series = pd.Series(data)
# 输出Series对象内容
print(series)
程序运行结果如下:
0 A
1 B
2 C
dtype: object
Process finished with exit code 0
说 明
在上述程序的运行结果中,左侧数字列为索引列,右侧字母列为索引对应的元素。Series对象在没有指定索引时,将默认生成从0开始依次递增的索引值。
§ 在创建Series对象时,是可以指定索引名称的,例如指定索引项为a、b、c。示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 7:48 PM
# 文件 :指定索引的Series对象.py
# IDE :PyCharm
# 导入pandas模块
import pandas as pd
# 创建数据数组
data = ['A', 'B', 'C']
# 创建索引名称的数组
index = ['a', 'b', 'c']
# 创建指定索引的Series对象
series = pd.Series(data, index=index )
# 输出指定索引的Series对象内容
print(series)
程序运行结果如下:
a A
b B
c C
dtype: object
Process finished with exit code 0
§ 访问数据
在访问Series对象中的数据时,可以单独访问索引数组或者元素数组。示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 7:52 PM
# 文件 :访问数据.py
# IDE :PyCharm
# 导入pandas模块
import pandas as pd
# 创建数据数组
data = ['A', 'B', 'C']
# 创建索引名称的数组
index = ['a', 'b', 'c']
# 创建指定索引的Series对象
series = pd.Series(data, index=index )
# 输出索引数组
print('索引数组为:', series.index)
# 打印元素数组
print('元素数组为:', series.values)
程序运行结果为:
索引数组为: Index(['a', 'b', 'c'], dtype='object')
元素数组为: ['A' 'B' 'C']
Process finished with exit code 0
当需要获取指定下标的数组元素时,可以直接通过“Series对象[下标]“的方式进行数组元素的获取,数组下标从0开始。示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 7:57 PM
# 文件 :获取指定下标的数组元素.py
# IDE :PyCharm
import pandas as pd
# 创建数据数组
data = ['A', 'B', 'C']
# 创建索引名称的数组
index = ['a', 'b', 'c']
# 创建指定索引的Series对象
series = pd.Series(data, index=index )
# 输出指定下标的数组元素
print('指定下标的数组元素为:', series[1])
# 输出指定索引的数组元素
print('指定索引的数组元素为:', series['a'])
程序运行结果如下:
指定下标的数组元素为: B
指定索引的数组元素为: A
Process finished with exit code 0
当需要获取多个下标对应的Series对象时,可以指定下标范围,示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 8:03 PM
# 文件 :指定下标范围获取数据.py
# IDE :PyCharm
import pandas as pd
# 创建数据数组
data = ['A', 'B', 'C']
# 创建索引名称的数组
index = ['a', 'b', 'c']
# 创建指定索引的Series对象
series = pd.Series(data, index=index)
# 输出下标为0,1,2对应的Series对象
print('获取多个下标对应的Series对象:')
print(series[0:3])
程序运行结果如下:
获取多个下标对应的Series对象:
a A
b B
c C
dtype: object
Process finished with exit code
除了通过指定下标范围的方式获取Series对象之外,还可以通过指定多个索引的方式获取Series对象。示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 8:13 PM
# 文件 :指定多个索引方式获取Series对象.py
# IDE :PyCharm
import pandas as pd
# 创建数据数组
data = ['A', 'B', 'C']
# 创建索引名称的数组
index = ['a', 'b', 'c']
# 创建指定索引的Series对象
series = pd.Series(data, index=index)
# 输出索引a、b对应的Series对象
print('获取多个索引对应的Series对象:')
print(series[['a', 'b']])
程序运行结果如下:
获取多个索引对应的Series对象:
a A
b B
dtype: object
Process finished with exit code 0
§ 修改元素值
修改Series对象的元素值时,同样可以通过指定下标或者指定索引的方式来实现。示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 8:19 PM
# 文件 :修改Series对象的元素值.py
# IDE :PyCharm
# 导入pandas模块
import pandas as pd
# 创建数据数组
data = ['A', 'B', 'C']
# 创建索引名称的数组
index = ['a', 'b', 'c']
# 创建指定索引的Series对象
series = pd.Series(data, index=index )
# 修改下标为0的元素值
series[0] = 'D'
print('修改下标为0的元素值:\n')
print(series)
# 修改索引为b的原素值
series['b'] = 'A'
print('修改索引为b的元素值:')
# 打印修改元素值以后的Series对象
print(series)
程序运行结果如为:
修改下标为0的元素值:
a D
b B
c C
dtype: object
修改索引为b的元素值:
a D
b A
c C
dtype: object
Process finished with exit code 0
- DataFrame对象
在创建DataFrame对象时,需要通过字典来实现。其中每列的名称为键,而每个键对应的是一个数组,这个数组作为值。示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 10:09 PM
# 文件 :DataFrame对象.py
# IDE :PyCharm
# 导入pandas模块
import pandas as pd
data = {
'A':[1, 2, 3, 4, 5],
'B':[6, 7, 8, 9, 10],
'C':[11, 12, 13, 14, 15]}
# 创建DataFrame对象
data_frame = pd.DataFrame(data)
# 输出DataFrame对象内容
print(data_frame)
程序运行结果如下:
A B C
0 1 6 11
1 2 7 12
2 3 8 13
3 4 9 14
4 5 10 15
Process finished with exit code 0
说 明
上面运行结果中看到,左侧单独的数字(0-4)为索引列,在没有指定特定的索引时,DataFrame对象默认的索引将从0开始递增。右侧A、B、C列名为键,列名对应的值为数组。
DataFrame对象同样可以单独指定索引名称,指定方式与Series对象类似,示例代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 10:29 PM
# 文件 :单独指定索引名称.py
# IDE :PyCharm
import pandas as pd
data = {
'A':[1, 2, 3, 4, 5],
'B':[6, 7, 8, 9, 10],
'C':[11, 12, 13, 14, 15]}
# 自定义索引
index = ['a', 'b', 'c', 'd', 'e']
# 创建自定义索引DataFrame对象
data_frame = pd.DataFrame(data, index = index)
# 输出DataFrame对象内容
print(data_frame)
程序运行结果如下:
A B C
a 1 6 11
b 2 7 12
c 3 8 13
d 4 9 14
e 5 10 15
Process finished with exit code 0
如果数据中含有不需要的数据列时,可以在创建DataFrame对象时指定需要的数据列名。示例代码如如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :2/13/22 10:33 PM
# 文件 :指定需要的数据列名.py
# IDE :PyCharm
import pandas as pd
data = {
'A':[1, 2, 3, 4, 5],
'B':[6, 7, 8, 9, 10],
'C':[11, 12, 13, 14, 15]}
# 创建指定列名的DataFrame对象
data_frame = pd.DataFrame(data, columns=['B', 'C'])
# 输出DataFrame对象内容
print(data_frame)
程序运行结果如下:
B C
0 6 11
1 7 12
2 8 13
3 9 14
4 10 15
Process finished with exit code 0
接下文 Python爬虫-数据处理与存储(二)
https://developer.aliyun.com/article/1617982