我是靠谱客的博主 优美枫叶,最近开发中收集的这篇文章主要介绍python读取csv数据背景,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 背景
    • 1. 读取csv文件
    • 2.判断文件是否存在
    • 3.打印当前时间
    • 4. 生成随机指定维度指定范围的tensor
    • 5. pytorch计算欧氏距离,曼哈顿距离
    • 6. pytorch 18种损失函数
    • 7. 对一个tensor 做行标准化
    • 8. 随机数据集分隔,可复现
    • 9. 更新optuna产生的study
    • 9. 使用正则表达式re替换字符串

背景

总结经常用到的python函数

1. 读取csv文件


data = pd.read_csv(fname, encoding="gbk",keep_default_na=False)# 读取空字符串而不是nan了
# data.iloc[1]
得第2行的数据
# data.iloc[1][1]
第2行第2个数据
# data.iloc[:, 1]
# 第2列,即列名称为'B'的列,1 4 9 13
# data.iloc[:, 0:3]
# 前3列
# data.iloc[:, [0, 3]]
# 第1第4列
# data.to_excel('test.xlsx')
slice_data = data.iloc[:,[0,16,9,10,14,15]]
# slice_data = data.iloc[:,[0,16]]
for i in range(len(slice_data)):
segment_id = slice_data.iloc[i][0]
# 读取xlsx文件

data = pd.read_excel(fname)
# 取出第一行第二个元素eg: '我要办理给家人的流量共享'
data.iloc[0][1]
# 以array形式返回第一行的数据eg: array([0, '我要办理给家人的流量共享'], dtype=object)
data.iloc[0].values

读取其他格式文件参考

2.判断文件是否存在

判断进入python环境的当前目录,或者ide打开的文件目录下是否存在test.txt文件。
在程序循环的过程中,适用于文件存在则省去生成过程,反之则生成文件。

import os
os.path.isfile('test.txt') #如果不存在就返回False

3.打印当前时间

在输出log文件的时候可用作拼接字符串操作,形成文件名

import time
time.strftime('%Y_%m_%d_%H_%M_%S',time.localtime(time.time()))

output

'2021_05_07_20_00_28'

4. 生成随机指定维度指定范围的tensor

import torch
a = torch.normal(mean = 1,std = torch.arange(1.0,6.0).float())
print(a)
std = torch.arange(1,6)
print(std)
#输出
tensor([1.0243, 2.7108, 4.2406, 0.8341, 4.0412])
tensor([1, 2, 3, 4, 5])

5. pytorch计算欧氏距离,曼哈顿距离

import torch.nn.functional as F
distance = F.pairwise_distance(rep_a, rep_b, p=2) # p=1 曼哈顿距离
torch.cosine_similarity( positive_embedding, cur_embedding, dim=-1) # 计算余弦相似度

其中rep_a和rep_b为[batch_size,hidden_dim]

>>> import torch
>>> import torch.nn.functional as F
>>> import numpy as np
>>> t1=torch.ones(2,3)
>>> t1
tensor([[1., 1., 1.],
[1., 1., 1.]])
>>> t2=torch.tensor(np.arange(6).reshape(2,3)+0.0)
>>> t2
tensor([[0., 1., 2.],
[3., 4., 5.]], dtype=torch.float64)
>>> F.pairwise_distance(t1,t2)
tensor([1.4142, 5.3852], dtype=torch.float64)
>>> F.pairwise_distance(t1,t2,p=1)
tensor([2.0000, 9.0000], dtype=torch.float64)

各种距离和相似度计算方式

6. pytorch 18种损失函数

参考和应用

7. 对一个tensor 做行标准化

>>> import torch
>>> import numpy as np
>>> t1=torch.tensor(np.arange(6).reshape(2,3))+0.
>>> t1
tensor([[0., 1., 2.],
[3., 4., 5.]])
>>> row_sum = torch.sum(t1,dim=1)
tensor([ 3., 12.])
>>> r_inv = np.power(row_sum, -1).flatten()
>>> r_inv
tensor([0.3333, 0.0833])
>>> r_inv[torch.isinf(r_inv)] = 0.
>>> r_inv
tensor([0.3333, 0.0833])
>>>r_mat_inv = torch.diag(r_inv) # 区别于np.diags(r_inv)
>>> r_mat_inv
tensor([[0.3333, 0.0000],
[0.0000, 0.0833]])
# r_mat_inv.mul(t1) 是点乘,matmul是矩阵相乘
>>> r_mat_inv.matmul(t1)
tensor([[0.0000, 0.3333, 0.6667],
[0.2500, 0.3333, 0.4167]])

8. 随机数据集分隔,可复现

为了分隔数据集为训练集测试集,且保证可复现通过随机数种子设置,

# 要分割的数据集以dict方式存储
def preprocess_split_data(normed_ways_segment_volume_dict):
'''
normed_ways_segment_volume_dict=dict
k=int	v=[1,2,3...]
return ways_segment_list = 单层 list
ways_slice_volume_list
= 双层的list
'''
ways_segment_list = []
ways_slice_volume_list
= []
# 如果不做排序的话,可能导致返回的list 每次次序不不一样
# 即使设置了seed,导致实验结果也不可复线
normed_ways_segment_volume_dict = sorted(normed_ways_segment_volume_dict.items(), key=lambda item:item[0], reverse = False)
for ways_volume_truple in normed_ways_segment_volume_dict:
ways_segment_list.append(ways_volume_truple[0])
ways_slice_volume_list.append(ways_volume_truple[1])
return ways_slice_volume_list
, ways_segment_list
if __name__ == '__main_':
from sklearn.model_selection import train_test_split
data_feature, data_target = preprocess_split_data(unnormed_ways_segment_volume_dict) # TODO: 划分数据集总是随机,不可复现,normed_ways_segment_volume_dict->unnormed_ways_segment_volume_dict
train_volume_arr, test_volume_arr, train_leida_id_arr, test_leida_id_arr = 
train_test_split(data_feature, data_target, test_size=args.percent, random_state=args.seed)

9. 更新optuna产生的study

产时间不运行的话,如果使用好久之前的.db文件会报如下错误:

Exception has occurred: RuntimeError
The runtime optuna version 2.7.0 is no longer compatible with the table schema (set up by optuna 2.0.0). Please execute `$ optuna storage upgrade --storage $STORAGE_URL` for upgrading the storage.
File "G:我的坚果云paperhangzhou_traffic_flow_forcastGCN_hangzhougcn_hangzhou_optuna.py", line 395, in <module>
study = optuna.create_study(study_name='hangzhou_study', storage='sqlite:///hangzhou/log/hangzhou_study.db', load_if_exists=True)

解决方案,首先在命令行进入存放.db文件的指定路径,按照提示再次编译.db文件,即可解决

(py3.6) G:我的坚果云paperhangzhou_traffic_flow_forcastGCN_hangzhouhangzhoulog>optuna storage upgrade --storage sqlite:///hangzhou_study.db
[I 2021-05-27 23:12:54,272] Upgrading the storage schema to the latest version.
[I 2021-05-27 23:12:54,819] Completed to upgrade the storage.
(py3.6) G:我的坚果云paperhangzhou_traffic_flow_forcastGCN_hangzhouhangzhoulog>

9. 使用正则表达式re替换字符串

re函数的使用

 t=('adksaljdlk' '123453')
>>> re.sub("123+", '*', t.lower()) # re+ 表示一个或多个表达式
'adksaljdlk*453'

最后

以上就是优美枫叶为你收集整理的python读取csv数据背景的全部内容,希望文章能够帮你解决python读取csv数据背景所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部