xlsx的python处理

xlsx的python处理

方法

刚开始使用xlrd模块去做
安装

pip install xlrd

查阅资料准备采用pandas库,其封装好了xlrd库

读取xlsx

pandas读取xlsx

 data = pd.read_excel(path, sheet_name=0, header=[0])
 data.head()

遇到一个错误:

ValueError: Your version of xlrd is 2.0.1. In xlrd >= 2.0, only the xls format is supported. Install

参考https://blog.csdn.net/qq_52684907/article/details/118995579
安装库openpyxl

pip install openpyxl

得到的数据DataFrame是一种表格的形式,可以转化为numpy.array

data = data.values

直接csv模块读取csv

使用 with

import pandas as pd
import csv
 with open(path_csv,"r") as csvfile:
        reader=csv.reader(csvfile)
        for line in reader:
          print(line)

读取文件名是xlsx的文件列表

dir ='D:\\files_save\\code\\ANT_process\\data_use';
filelist = []
for i in os.listdir(dir):                                          #遍历整个文件夹
    path = os.path.join(dir, i)
    if os.path.isfile(path):                                       #判断是否为一个文件,排除文件夹
        if os.path.splitext(path)[1]==".xlsx":                      
            filelist.append(i)
Tsub_num=len(filelist)

for sub_num in range(Tsub_num):
    sub_name = filelist[sub_num];path = os.path.join(dir, sub_name)

panda 写文件

先设置成字典的格式,再放入表格中,行列不符合要求的话直接转置就可。
orient=‘index’ 参数的设置是将空格补充成none,否则会报错

  data={'a':a,
          'b':b};
    df = pd.DataFrame.from_dict(data, orient='index')
    df=df.T
    print(df)
    df.to_excel(path_x)
    

通过url下载文件

不考虑中断重新开始的问题
环境是python3.9
根据查到的方案
各种方案
可以使用的库

  1. request
  2. urllib3
  3. wget
    urllib3 在使用 的时候
http = urllib3.PoolManager() 
f=open(dataset_file, 'wb');

一直连接不上一直失败找不到原因
打算使用wget ,可用,有个问题是 我需要down的文件名不在url中可见

wget.filename_from_url(uri)

无法获得原本的文件名
查阅得到的解析方法

from urllib.request import urlopen 
url = "https://zztop.us/rec/download/6cUsf-r5pjo3GNfGtgSDAv9xIXbzy9vms0iRKq6YNn0m8UHILNlKiMrMWMecDkmKyv5o675Hp1ZrKPF16"
response = urlopen(url)
filename = response.headers.get_filename()
print(filename)

wget中也有函数

wget.filename_from_headers

需要参数header ,如何获得header, 我的查阅都是使用urllib.request,我的环境无法安装urllib,最后获取url的basename作为文件名暂时凑乎。

violinplot sns

主要是数据格式 ,官方链接
dataset 是表格的形式 x y 和其他的参数是表格的表头
https://seaborn.pydata.org/generated/seaborn.violinplot.html

seaborn.violinplot(*, x=None, y=None, hue=None, data=None, order=None, hue_order=None, bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100, width=0.8, inner='box', split=False, dodge=True, orient=None, linewidth=None, color=None, palette=None, saturation=0.75, ax=None, **kwargs)

遇到错误:

Neither the `x` nor `y` variable appears to be numeric.

解决
pandas.DataFrame.explode() 将列表列转为独立的单元格,能将值转换为实数而不是字符串

foo = foo.explode('Values')
foo['Values'] = foo['Values'].astype('float')
sns.violinplot(data=foo, x='Names', y='Values')

参考链接
添加链接描述

参数中int 和array的统一的问题

在函数中我经常遇到会需要某个参数的shape的情况,但是int的输入是没有shape的,想要统一 ,当参数之有一个值的时候经常忘记把参数变成矩阵
例如:

c=np.array([6])

为了简单的统一这个问题,可以对int类型的输入先处理:

    if isinstance(channel, int):
        channel = np.array([channel])

这样就算是输入是int 也可以有shape 不会报错

按照循环扩展一个矩阵的维度numpy(几种常见的情况)

首先我们需要明确的就是numpy是不能初始化一个没有空间的空数据的,即使是空数组也要有形状才能被初始化
也就是说c=np.array([])是会报错的,不像matlab可以设置空矩阵然后通过给空矩阵增加维度,把一系列的矩阵按照循环放到一个新的大矩阵中。
这完成类似的功能
我想了几种大概的解决方案:

  1. 已知这一系列的矩阵的大小以及知道循环的次数
    这种直接生成一个已知 大小的大矩阵,再通过切片的方式把小矩阵放进去
n_cycles,A_shape0,A_shape1=234
B_mat=np.zeros((n_cycles,A_shape0,A_shape1))
for i_cycles in range(n_cycles):  
     rng= np.random.RandomState(i_cycles )
     A_mat= rng.randn(A_shape0,A_shape1)
     B_mat=[i_cycles ,:,:]=A_mat

2.已知这一系列的矩阵的大小以及不知道循环的次数 但是一系列的矩阵大小一样
使用list extend的方式连接这些矩阵 但是在最后要进行reshape处理变成三维的矩阵

B_mat=[]
i_cycles =0
while  (A condition):
     rng= np.random.RandomState(i_cycles )
     A_mat= rng.randn(A_shape0,A_shape1)
     B_mat.extend(A_mat)
     i_cycles =i_cycles +1
B_mat=np.array(B_mat).reshape(A_mat.shape[0],A_mat.shape[1],i_cycles)
  1. 当已知循环次数,但是矩阵大小不同
n_cycles=5
B_mat=np.empty((n_cycles),dtype=object)
for i_cycles in range(n_cycles):  
    A_shape0= random.randint(50)
    A_shape1= random.randint(50)
    rng= np.random.RandomState(i_cycles )
    A_mat= rng.randn(A_shape0,A_shape1)
    B_mat=[i_cycles]=A_mat
  1. 当未知循环次数,但是矩阵大小不同
    有个傻逼思路,就是先写个循环测试一下循环次数 ,然后按照三来弄

你可能感兴趣的:(Code,python)