Python学习记录

本文介绍了使用Python的xlrd和xlwt库读写Excel文件,以及Numpy库对数据进行处理的方法,包括读取特定列数据、写入数据到新工作表、计算复数角度、生成列表、四则运算、统计计算(平均值、方差、标准差)以及列表的筛选和排序等操作。
摘要由CSDN通过智能技术生成

一、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]:返回01的数据,故返回第一个数据
list[1:]:返回从10的数据,故返回第二个到最后一个的数据(不包含结束索引位置0list[-1:]:返回从-10的数据,故返回最后一个数据
list[:-1]:返回从0-1的数据,故返回第一个到倒数第二个的数据(不包含结束索引位置-1list[::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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值