数据预处理基本操作

一、csv文件的操作

csv为纯文本表格存储中的一种
在txt文件中的写法为,以半角逗号为分隔符来分隔数据,写法如下:

id, name, sex(半角逗号为英文输入法的逗号)

1、csv文件的的读取

文件展示:
在这里插入图片描述

程序和运行结果:

import csv

csvfile = open('E:\Python\数据预处理\文件\csv_test1.csv', 'r') #以可读形式打开csv文件
eader = csv.reader(csvfile) #返回一个reader对象,它将迭代给定csvfile中的行

for row in eader: #遍历迭代器,输出值
    print(row)
csvfile.close() #关闭文件

在这里插入图片描述

2、csv文件的写入

write、writerow、writerows的区别

- write():将一个字符串中的字符以逗号为分隔符写入,并且无法自动换行

import csv

"""使用write写入"""
csvfile = open('D:\程序\Python\数据预处理文件\csv_test.csv', 'w') #以可写形式打开
datalist = [['学号, 姓名, 性别, 年龄'], ['1, 小明, 男, 18']] #创建二维数组
count = 0 #计数器
for i in range(len(datalist)): #使用循环遍历来写入值
     csvfile.write(datalist[i][count] + '\n') 
csvfile.close()

在这里插入图片描述

- writerow():将一个列表全部写入csv的同一行

import csv

"""使用writerow写入"""
csvfile = open('D:\程序\Python\数据预处理文件\csv_test.csv', 'w', newline='') #以可写形式打开
datalist = [["学号", "姓名", "性别", "年龄"], ["1", "小明", "男", "18"]] #创建二维数组
csv_writer = csv.writer(csvfile)
for i in datalist: #使用循环遍历来写入值
     csv_writer.writerow(i) 
csvfile.close()

在这里插入图片描述

- writerows():将一个二维列表中的每一个列表写为一行

import csv

"""使用writerows写入"""
csvfile = open('D:\程序\Python\数据预处理文件\csv_test.csv', 'w', newline='') #以可写形式打开
datalist = [["学号", "姓名", "性别", "年龄"], ["1", "小明", "男", "18"]] #创建二维数组
csv_writer = csv.writer(csvfile)
csv_writer.writerows(datalist) 
csvfile.close()

在这里插入图片描述

二、json文件的操作

在txt文件中以字典形式来存放,如:

{“姓名”:“小明”, “年龄”:18}

1、json文件的读取

load:对文件对象进行操作
loads:将已编码的 JSON 字符串解码为 Python 对象

文件展示:
在这里插入图片描述
在这里插入图片描述

程序与运行结果

- load单行读取

import json

"""load单行文件的读取"""
json_data = open('D:\程序\Python\数据预处理文件\json_data.json', 'r') #读取文件对象
print(json_data)
data = json.load(json_data) #load直接读取文件对象
print(data)

for key in data.keys(): #遍历键值对 keys()函数返回所有键
     print("key:{key}, value:{value}".format(key=key, value=data.get(key))) #format初始化字符串 get()返回键对应的值
json_data.close() #关闭文件

在这里插入图片描述

- loads单行读取

import json

"""loads单行文件的读取"""
json_data = open('D:\程序\Python\数据预处理文件\json_data.json').read() #直接读取文件中的内容
print(json_data)
data = json.loads(json_data) #loads将已编码的JSON字符串解码为Python对象
print(data)

for key in data.keys(): #遍历键值对 keys()函数返回所有键
    print("key:{key}, value:{value}".format(key=key, value=data.get(key))) #format初始化字符串 get()返回键对应的值

在这里插入图片描述

- 多行读取

import json

"""多行文件的读取"""
json_data = open('D:\程序\Python\数据预处理文件\json_data.json', 'r') #读取文件对象
print(json_data)
for line in json_data.readlines(): #按行读取文件
     line = line.strip() #删除空白字符 避免读取空行
     if len(line) != 0:
          data = json.loads(line) #loads将已编码的JSON字符串解码为Python对象
          for key in data.keys(): #遍历键值对 keys()函数返回所有键
               print("key:{key} value:{value}".format(key=key, value=data.get(key))) #format初始化字符串 get()返回键对应的值
          print("——"*10)
json_data.close() #关闭文件

在这里插入图片描述

2、json文件的写入

dump:将Python对象按照JSON格式序列化到文件中
dumps:将Python对象处理成JSON格式的字符串

- dump写入

import json

"""dump写入文件"""
with open('D:\程序\Python\数据预处理文件\json_test.json', 'w', encoding='utf-8') as f:
     data = [{"姓名":"小明", "年龄":18}, {"姓名":"小红", "年龄":19}]
     json.dump(data, f, indent=2, ensure_ascii=False) #dump序列化时对中文默认使用ASCII码值
f.close()

在这里插入图片描述

- dumps写入

import json

"""dumps写入文件"""
with open('D:\程序\Python\数据预处理文件\json_test.json', 'w', encoding='utf-8') as f:
     data = [{"姓名":"小明", "年龄":18}, {"姓名":"小红", "年龄":19}]
     json_data = json.dumps(data, indent=2, ensure_ascii=False)
     print(json_data)
     f.write(json_data)
f.close()

在这里插入图片描述

三、xml文件的操作

xml是一种可扩展的标记语言,与html有些相似, 格式如下:

<?xml version="1.0" encoding="UTF-8"?>
 
<!-- 人类 -->
<people>
	<object>
		<single mouth="5"/>
		<name report="yes">libero</name>
		<age year="1998">22</age>
		<sex></sex>
	</object>
 
	<object>
		<single mouth="5"/>
		<name report="yes">rock</name>
		<age year="1980">40</age>
		<sex></sex>
	</object>
 
</people>

<?xml version="1.0" encoding="UTF-8"?>是xml的头文件,与c语言中的头文件#include<stdio.h>,html头文件类似
 是xml文件格式中的注释
 则是一个根标签。 一个XML的文件是一种标签的树状结构,所以根标签只有一个,但是可以有很多子标签,当子标签没有孩子标签的时候就要给与值 写在标签的中间
注意标签一般都是成对出现的,当然也有不成对的 如 它加属性 写成
成对子标签的属性 就libero这种形式

文件展示:

<?xml version="1.0" encoding="utf-8"?>
<list>
<student id="stu1" name="stu">
	<id>1001</id>
	<name>小明</name>
	<age>22</age>
	<gender></gender>
</student>
<student id="stu2" name="stu">
	<id>1002</id>
	<name>小红</name>
	<age>21</age>
	<gender></gender>
</student>
</list>

1、xml文件的读取

import xml.etree.ElementTree as ET

tree = ET.parse(r"D:\程序\Python\数据预处理文件\xml_data.xml")
root = tree.getroot() #获取根节点

#标签名
print('root:', root) #输出根节点
print('root_tag:', root.tag) #输出数据种类
print("——"*10)
for stu in root:
     #属性值
     print(stu)
     print("stu_name:", stu.attrib["name"]) #抓取该标签的数组
     #标签中内容
     print("id:", stu[0].text) #访问标签内容
     print("name:", stu[1].text)
     print("age:", stu[2].text)
     print("gender:", stu[3].text)
     print("——"*10)

在这里插入图片描述

2、xml文件的写入

import xml.etree.ElementTree as ET

"""按格式写入"""
def indent(elem, level=0):
    i = "\n" + level*"\t"
    if len(elem):
         if not elem.text or not elem.text.strip():
             elem.text = i + "\t"
         if not elem.tail or not elem.tail.strip():
             elem.tail = i
         for elem in elem:
             indent(elem, level+1)
         if not elem.tail or not elem.tail.strip():
             elem.tail = i
    else:
         if level and (not elem.tail or not elem.tail.strip()):
             elem.tail = i

data = {"学号":"1", "姓名":"小明", "性别":"男"}
root = ET.Element('list')       # 创建节点
tree = ET.ElementTree(root)     # 创建文档

element = ET.Element('学生')
element.set('班级', "大数据一班")
for key in data.keys(): #遍历键值对 keys()函数返回所有键
     element1 = ET.Element(key)
     element1.text = data.get(key)
     element.append(element1)
root.append(element)
indent(root)
tree.write(r"D:\程序\Python\数据预处理文件\xml_test.xml", encoding='UTF-8', xml_declaration=True)

在这里插入图片描述

四、excel文件的操作

xlrd: 对excel进行读相关操作
xlwt: 对excel进行写相关操作
xlutils: 对excel读写操作的整合
注意:这三个库只能对xls文件进行操作

1、excel文件读取

在这里插入图片描述

import xlrd

"""读取数据"""
data = xlrd.open_workbook(r'D:\程序\Python\数据预处理文件\xls_data.xls') # 打开xls文件
table = data.sheets()[0] # 打开第一张表
print(table.cell(2,1)) # 获取指定行列的数据类型和数据
nrows = table.nrows # 获取表的行数
for i in range (nrows): # 循环逐行打印
     if i == 0 : # 跳过第一行
          continue
     print(table.row_values(i)[:10]) # 取前十列

在这里插入图片描述

2、excel文件的写入

import xlwt

"""写入数据"""
data = [["姓名", "性别", "年龄"], ["小明", "男", 18], ["小红", "女", 19]]

workbook = xlwt.Workbook(encoding='utf-8') #定义字符编码
worksheet = workbook.add_sheet('MyWorksheet') #定义表格名称

for i in range(0, len(data)): #使用for循环遍历二维数组来实现写入数据
     for j in range(0, len(data[i])):
          worksheet.write(i, j, data[i][j])
workbook.save(r'D:\程序\Python\数据预处理文件\xls_test.xls') #保存

在这里插入图片描述

3、xrld、xlwt、xlutils的区别

在这里插入图片描述

五、PDF文件的操作

六、文件操作

1、csv转json文件

文件展示:
在这里插入图片描述
程序和运行结果:

import csv
import json

"csv转json"
csvfile = open("D:\程序\Python\数据预处理文件\csv_data.csv")
data = csv.reader(csvfile)
list = []

for i in data:
    list.append(i)

csvfile.close()

data = {}
jsonfile = open("D:\程序\Python\数据预处理文件\csv_json_test.json", "w", encoding="utf-8")
i, j = 0, 1
for i in range(len(list)):
    if i == 0:
        continue
    for j in range(len(list[i])):
        data[list[0][j]] = list[i][j]
    json.dump(data, jsonfile, indent=2, ensure_ascii=False)
jsonfile.close()

在这里插入图片描述

2、将两个csv文件合并成一个

文件展示:
在这里插入图片描述
在这里插入图片描述
程序和运行结果:

import csv
import json

"""合并csv文件"""
csvfile1 = open('D:\程序\Python\数据预处理文件\csv_combine1.csv', 'r')
data1 = csv.reader(csvfile1) #将读取文件输出为一行一行列表
csvfile2 = open('D:\程序\Python\数据预处理文件\csv_combine2.csv', 'r')
data2 = csv.reader(csvfile2)
list1 = []
list2 = []
for i in data1:
     list1.append(i)
for j in data2:
     list2.append(j)
count = 0
f = open('D:\程序\Python\数据预处理文件\csv_combine.csv', 'w', encoding='utf-8', newline='')
csv_writer = csv.writer(f)
while count < len(list1):
     list1[count].extend(list2[count])
     csv_writer.writerow(list1[count])
     count += 1
f.close()

在这里插入图片描述

3、将一个csv文件拆分成多个csv文件

文件展示:
在这里插入图片描述
程序和运行结果:

import csv
import json

"""拆分csv文件"""
csvfile = open('D:\程序\Python\数据预处理文件\csv_split.csv', 'r')
data = csv.reader(csvfile) #将读取文件输出为一行一行列表
list = []
list1 = []
for i in data:
     list.append(i)
csvfile.close()

num = 0
count = 1
count1 = 1
namecount = 1
while list:
     if count > 7:
          break
     else:
          if len(list1) == 0:
               list1.append(list[num]) #写入每列的字段
          elif 0 < len(list1) < 3: #判断文件是否达到要求行数
               list1.append(list[count1])
               count1 += 1 #数组下标
               count += 1 #行数
          elif len(list1) == 3:
               """生成文件名称"""
               dataname = "D:\程序\Python\数据预处理文件\拆分文件"+ "/" + "csv_split" + str(namecount) + ".csv"
               f = open(dataname, 'w', encoding='utf-8', newline='') #以写的形式打开文件
               csv_writer = csv.writer(f)
               for j in list1:
                    csv_writer.writerow(j) #按行写入
               list1 = [] #清空列表
               namecount += 1 #文件名
f.close() #关闭文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、算法

1、mad算法

import numpy as np

"""mad算法"""
def MAD(dataset, n):
     rdataset = []
     wdataset = []
     median = np.median(dataset) #中位数
     print(median)
     deviations = abs(dataset-median) #原数据-中位数
     print(deviations)
     mad = np.median(deviations) #离群值的中位数
     print(mad)
     print(len(dataset))

     for i in range(len(dataset)):
          if dataset[i] > median + n*mad:
               wdataset.append(dataset[i])
          elif dataset[i] < median - n*mad:
               wdataset.append(dataset[i])
          elif median - n*mad <= dataset[i] <= median + n*mad:
               rdataset.append(dataset[i])
     return rdataset

print(MAD([1, 2, 3, 4, 5, 900, 80], 1))

在这里插入图片描述

2、3σ算法

import numpy as np

"""3σ算法"""
def three_sigma(dataset, n=3):
     rdataset = []
     wdataset = []
     mean = np.mean(dataset) #均值
     print(mean)
     sigma = np.std(dataset) #标准差
     print(sigma)

     for i in range(len(dataset)):
          if mean - n*sigma < dataset[i] < mean + n*sigma:
               rdataset.append(dataset[i])
          elif mean - n*sigma > dataset[i] or mean + n*sigma < dataset[i]:
               wdataset.append(dataset[i])
     return rdataset

print(three_sigma([1, 2, 3, 4, 5, 900, 80, 10.2131231]))

在这里插入图片描述

3、百分位算法

"""百分位法"""
def percent_range(dataset, min= 0.20, max= 0.80):
     rdataset = []
     wdataset = []
     print(sorted(dataset, reverse=True))
     range_max = np.percentile(dataset, max * 100)
     print(range_max)
     range_min = np.percentile(sorted(dataset, reverse=True), min * 100)
     print(range_min)
 
     # 剔除前20%和后80%的数据
     for value in dataset:
          if value < range_max and value > range_min:
               rdataset.append(value)
     return rdataset

print(percent_range([1, 2, 3, 4, 5, 6, 7, 8]))

在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Destiny4c6

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

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

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

打赏作者

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

抵扣说明:

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

余额充值