第三周第一次
今天主要是用Python对数据组新爬虫得到的2017——2019的农作物产量表进行更新(原有的数据只更新到2016年,数据库里的数据也到2016年为止,过于老旧了)
主要使用Python自带的pandas库对csv文件进行处理,得到自己想要的行列
原有的数据:
手动处理过后的数据,我手工增加了比较容易添加的城市和农作物种类这几列,通过Python的gbk模式打开以后可以看到,该csv文件有很多空白行和空白列:
空白列的处理在生成新的csv文件时就已经被完成,我们的最终要求是将小麦、玉米、棉花这三种作物的面积,总产量和亩产合并到一行,因此我写了三个函数,挑选不同作物相对应的列,分别把一个大表分成小麦、棉花、玉米三个小表,代码如下:
import pandas as pd
def readwrite1(input_file, output_file):
data = pd.read_csv(input_file, sep=',', header=None, encoding="gbk")
data.to_csv(output_file, sep=',', columns={0, 1, 2, 3,4,5}, header=None, index=False)
def readwrite2(input_file, output_file):
data = pd.read_csv(input_file, sep=',', header=None, encoding="gbk")
data.to_csv(output_file, sep=',', columns={0,1,6,7,8,9}, header=None, index=False)
def readwrite3(input_file, output_file):
data = pd.read_csv(input_file, sep=',', header=None, encoding="gbk")
data.to_csv(output_file, sep=',', columns={0, 1,10,11,12,13}, header=None, index=False)
input_file = "q菏泽.csv"
output_file1 = "data/q1.csv"
readwrite1(input_file, output_file1)
output_file2 = "data/q2.csv"
readwrite2(input_file, output_file2)
output_file3 = "data/q3.csv"
readwrite3(input_file, output_file3)`
处理效果如下:
可以看到,列已经按照我们的要求处理完成了,但是还是有很多空白行,这个我们最后导入数据库在进行处理。
这里我们一共有a——q张表,每张表处理后生成三张小表
生成的表:
我们将这些表合并为一张表(后来意识到好像先合并成一张表在分成三张总的小麦、玉米、棉花会比较方便,第一次使用Python处理数据不太熟练,之后通过实践一定可以方便快速的处理表单)
import pandas as pd
import os
Folder_Path = r'D:\PyCharm\data' # 要拼接的文件夹及其完整路径,注意不要包含中文
SaveFile_Path = r'D:\PyCharm\data_a' # 拼接后要保存的文件路径
SaveFile_Name = r'a.csv' # 合并后要保存的文件名
# 修改当前工作目录
os.chdir(Folder_Path)
# 将该文件夹下的所有文件名存入一个列表
file_list = os.listdir()
# 读取第一个CSV文件并包含表头
df = pd.read_csv(Folder_Path + '\\' + file_list[0]) # 编码默认UTF-8,若乱码自行更改
# 将读取的第一个CSV文件写入合并后的文件保存
df.to_csv(SaveFile_Path + '\\' + SaveFile_Name, encoding="utf_8_sig", index=False)
# 循环遍历列表中各个CSV文件名,并追加到合并后的文件
for i in range(1, len(file_list)):
df = pd.read_csv(Folder_Path + '\\' + file_list[i])
df.to_csv(SaveFile_Path + '\\' + SaveFile_Name, encoding="utf_8_sig", index=False, header=False, mode='a+')
效果如下:
可以看出列已经满足需求但是还是有很多空白行,将其导入数据库,也是有很多全为null的行,我们用数据库查询将其删除
DELETE FROM citycrop_new WHERE city is null;
效果如下(中间原本是全为null的行,没有截屏上,现在空白行已经没有了):
最后我们在添加一个id栏位,设置为主键,自动递增即可
完成了数据更新