6.28数据分析学习笔记
#一、数组的拷贝
#栈区与堆区:都存在于内存中,栈区读取较快,空间小,堆区读取较慢,空间大。数组储存在堆区、指向数组的变量(a1)储存在栈区
#1、不拷贝:简单的赋值不会对堆区进行拷贝,只是会为原有栈区添加新名称,a1与a2都会指向堆区。
import numpy as np
a1 = np.random.randint(1,6,size = (1,6))
print(a1)
a2 = a1
print(a2 is a1)#(指a1与a2为同一栈区)
print("="*30)
#2、浅拷贝:进行了变量的拷贝,但他们所指向的内存空间是一样的,这样新的变量只是一个视图(view),修改视图会改变原变量,称为浅拷贝。浅拷贝没有复制堆区,只是新建立了一个栈区,命名为a3并重新指向a1堆区(ravel同理)
a3 = a1.view()
a3[0,1] = 2
print(a1)
print(a3)
print(a3 is a1)#(指a1与a3为不同栈区)
print("="*30)
#3、深拷贝:对栈区与堆区同时进行拷贝(flatten同理)
a4 = a1.copy()
a4[:,5] = 3
print(a1)
print(a4)
print(a1 is a4)
#二、numpy文件操作
#1、savetxt及loadtxt:保存及读取csv文件(可设置header,不可存储三维及以上数组)
a1 = np.random.randint(1,6,size = (3,2))
a1
np.savetxt("test.csv",a1,delimiter = ",",header = '语文,哲学',comments = '',fmt = '%d')
a2 = np.loadtxt("test.csv",dtype=np.float,delimiter = ',' ,unpack = False,skiprows = 1)
print(a2)
#2、save及load:numpy的特有存储解决方案(不可设置header,可存储三维及以上数组)
np.save('a3',a1)
np.savez('a4',a1)
a5 = np.load("a3.npy")
a6 = np.load("a4.npz")
print(a5)
print(a6)
# 三、csv文件操作(python自带方法)
#1、读取csv文件
import csv
def read_cav_demo1():
filename = r'C:\Users\chen\Documents\Jupyter\data\豆瓣华语电影数据处理后.csv'
with open(filename,encoding ='UTF-8') as fp:
reader = csv.reader(fp)#reader是一个迭代器
next(reader)#next函数必须接收一个可迭代对象,每次调用的时候代返回当前行元素,并在下次调用的时候返回下一行
for x in reader:
actor = x[0]
date = x[1]
print({'actor':actor,'date':date})
def read_csv_demo2():
filename = r'C:\Users\chen\Documents\Jupyter\data\豆瓣华语电影数据处理后.csv'
with open(filename,encoding ='UTF-8') as fp:
reader = csv.DictReader(fp)#DictReader会自动将第一行作为字典的键,将整个文件处理为字典,因此读取出来的结果没有第一行作为值,适合用于读取有标题行的文件
for x in reader:
value = {"actor":x["actor"],"director":x["director"],"date":x["date"]}
print(value)
# if __name__ == '__main__':
# read_csv_demo2()
#2、写入csv文件
def write_csv_demo1():
filename = 'C:/Users/chen/Documents/Jupyter/data/test.csv'
headers = ['username','age','height']
values = [
('张三','18','180'),
('李四','19','175'),
('王五','21','181')
]
with open(filename,'w',encoding = 'utf-8',newline = '') as fp:
writer = csv.writer(fp)#规定如何写
writer.writerow(headers)#写入
writer.writerows(values)
def write_csv_demo2():
filename = 'C:/Users/chen/Documents/Jupyter/data/test - 副本.csv'
headers = ['username','age','height']
values = [
{'username':'张三','age':'18','height':'180'},
{'username':'李四','age':'19','height':'175'},
{'username':'王五','age':'21','height':'181'}
]
with open(filename,'w',encoding = 'utf-8',newline = '') as fp:
writer = csv.DictWriter(fp,headers)#规定如何写
writer.writeheader()#写入
writer.writerows(values)
if __name__ == '__main__':
read_csv_demo2()