一、python读写excel
1. 读取excel
import xlrd #读取excel库
#打开采样数据文件
file_name = r'C:\Users\Chaver\Desktop\task\sampled.xlsx'
wb = xlrd.open_workbook(file_name)
#根据 sheet 名称获取内容
sh1 = wb.sheet_by_name('3V-R-50Hz-data3')
#读取采集A、B、C 线电压值 (A:Uab,B:Ubc)
phase_A=sh1.col_values(1,1,257) # A相电压
phase_B=sh1.col_values(2,1,257) # B相电压
2. 写入excel
import numpy as np
import xlwt
#创建一个新的Excel工作簿
workbook = xlwt.Workbook(encoding='utf-8')
#创建一个名为'aaa'的工作表
sheet = workbook.add_sheet('aaa')
#写入列名称的标题行
header = ['id', 'name', 'age']
for i, column_name in enumerate(header):
sheet.write(0, i, column_name)
#数据
result = [
{"id": "1", "name": "张三", "age": "18"},
{"id": "2", "name": "李四", "age": "19"},
{"id": "3", "name": "王五", "age": "20"}
]
#逐行写入数据,enumerate中 start=1,表示从表格第一行(实际第二行)开始写
for i, data in enumerate(result, start=1):
sheet.write(i, 0, data['id'])
sheet.write(i, 1, data['name'])
sheet.write(i, 2, data['age'])
#写入已有列表
data = np.arange(10)
for i, value in enumerate(data, start=0):
sheet.write(i, 3, str(value)) # 此处str(value)以字符串形式输出value,因为result中包含“姓名”等非数值元素
#保存工作簿为Excel文件
workbook.save('C:/Users/Chaver/Desktop/task/hello.xls')
输出结果:
二、常用操作
1. 基本操作
获取复数角度值
angle_A = np.angle(fft_A,deg=True) # 取复数的角度 deg=True 返回角度,deg=0默认返回弧度
生成新列表
list_1 = [0] * len(data) # 固定长度的固定值列表
list_2 = [None] * len(data) # 固定长度的空列表
list_3 = np.linspace(0,9,10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_4 = np.range(3) # [0 1 2 ]
list_5 = np.range(3,9) # [3 4 5 6 7 8]
list_6 = np.range(0, 1 ,0.1) # [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
列表打印方式总结
按行打印输出列表
list=np.arange(30)
for x in range(len(list)):
print(list[x], end='\t') # 结尾为制表符
if (x+1) % 10 == 0:
print("\r") # 打印回车符,也可打印 "\n" 换行符, 但是粘贴至Excel两行之间会多一行
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
列表按列输出的两种方式,for 循环 and
(1) for 循环
list_2=np.arange(5)
for x in range(len(list_2)):
print(list_2[x])
(2) 加星号及换行处理
print(*list_2,sep = "\n") # 列表前加星号 的作用是将元素按单个数据处理
0
1
2
3
4
2. 两个列表的四则计算
相加 np.add(x1, x2) 只能两个列表对应元素相加;x1+x2 实际为两个列表元素拼接
相减 np.subtract(x1, x2)
3. 平均值、均方根值、方差、标准差 封装函数
### 平均值
def get_average(records):
return sum(records) / len(records)
### 方差
def get_variance(records):
average = get_average(records)
return sum([(x - average) ** 2 for x in records]) / len(records)
### 标准差
def get_standard_deviation(records):
variance = get_variance(records)
return math.sqrt(variance)
### 均方根
def get_rms(records):
return math.sqrt(sum([x ** 2 for x in records]) / len(records))
4. 列表元素筛选与调序
list[-1]:返回最后一个数据
list[:1]:返回0到1的数据,故返回第一个数据
list[1:]:返回从1到0的数据,故返回第二个到最后一个的数据(不包含结束索引位置0)
list[-1:]:返回从-1到0的数据,故返回最后一个数据
list[:-1]:返回从0到-1的数据,故返回第一个到倒数第二个的数据(不包含结束索引位置-1)
list[::1]:表示步长为1,步长大于0时,返回序列为原顺序;。
list[::-1]: 表示从右往左以步长为1进行切片。步长小于0时,返回序列为倒序
list[::2]: 表示从左往右步长为2进行切片
list = [1, 2, 3, 4, 5]
print(list[-1]) # 5
print(list[:1]) # [1]
print(list[1:]) # [2, 3, 4, 5]
print(list[-1:]) # [5]
print(list[:-1]) # [1, 2, 3, 4]
print(list[::1]) # [1, 2, 3, 4, 5]
print(list[::-1]) # [5, 4, 3, 2, 1]
print(list[::2]) # [1, 3, 5]
5. 条件判断返回列表对应索引值
5.1 遍历列表元素,条件判断,输出索引位置
position=[]
for x in range(len(up)):
if up[x]>30000:
position.append(x)
print("上零点坐标为 ",position)
5.2 获取列表1元素索引位置,输出列表2对应索引位置值
y_up = [1200, 800, 1500, 1100, 900]
up = ['A', 'B', 'C', 'D', 'E']
indices = [i for i, value in enumerate(y_up) if value > 1000] # 找到大于1000的值在y_up中的索引位置
elements = [up[i] for i in indices] # 访问up列表中相应索引位置处的元素
print(indices) # 输出: [0, 2, 3]
print(elements) # 输出: ['A', 'C', 'D']
**enumerate()是一个内置的Python函数,用于在迭代过程中获取元素的索引位置和对应的值。**
5.3 遍历列表,判断条件并进行四则运算
1. 列表内部判断赋值
delt_BA=[x+360 if x<-180 else 360-x if x>180 else x for x in delt_BA]
#两种列表赋值方法的比较
2. 直接在列表内部 if 判断赋值
y_1 = [ 0 if x <0 else x for x in y_1 ]
y_2 = [ 0 if x <0 else x for x in y_2 ]
3. 利用 for 循环判断赋值,但是注意 "k" 不能与代码上文复用
for k in range(len(y_1)):
if y_1[k]<0:
y_1[k]=0
for k in range(len(y_2)):
if y_2[k]<0:
y_2[k]=0