Python使用中遇到的问题及解决方法记录(链接记录)

本文记录一些实验过程中遇到的一些Python使用问题,以及一些前辈们记录的解决方法。前辈们已经记载的非常详细,因此在这里抛砖引玉,给出一些他们的一些地址(侵权可删)。

一、浅拷贝与深拷贝(copy&&deepcopy)

https://blog.csdn.net/qq_32907349/article/details/52190796

二、将list中的string转换成int/float

问题描述: txt文件中存在list数据,读出来时候的list是一个string类型。但是我需要使用这个list做相似度计算。

txt文件内容
1	[-0.09362039308413295, -0.09362055105803055, -0.09570869822080302, -0.11573336673430835, ...]

解决方法: 将取出来的这个string类型的列表,转换成type为list的变量,列表中每个元素的type为string。然后再将每个元素的type从string变成float。

vec1 = dict_Vec[tri[0]].lstrip('[').rstrip(']').split(',')
array1 = list(map(float, vec1))
vec2 = dict_Vec[tri[1]].lstrip('[').rstrip(']').split(',')
array2 = list(map(float, vec2))
similarity = cosin_distance(array1, array2)

将列表中的string转换成int/float

三、Python报错:TypeError: ‘NoneType’ object is not subscriptable

原因一: 使用了系统内置的关键字给变量赋值。——重新定义变量即可。
变量定义错误
原因二: 使用了返回值为None的函数,并把它赋值给某个变量。然后使用了这个变量。
函数使用不当

四、列表去重的方法(去重后改变顺序、去重后不改变顺序)

https://www.cnblogs.com/xxpythonxx/p/12181224.html

五、将两个txt文件按行合并

file1 = open("my.txt","r")
file2 = open("ids.txt","r")
 
file1_lists =file1.readlines()
file2_lists =file2.readlines()
 
file3_list = []
file4_list = []
for i in file1_lists:
    temp_list = i.split()
    file3_list.append(str(temp_list[0])) #根据新文件内容的要求也可以在这里做出修改,选择合适的数据加入到新的文件中
# print(len(file3_list))
 
for i in file2_lists:
    temp_list = i.split()
    file4_list.append(str(temp_list[0]))
# print(len(file4_list))
main_file = []
 
for i in range(len(file3_list)):
    s=""
    s = "".join([file3_list[i],file4_list[i]]) #如果需要合并的两行数据之间用tab隔开,使用 s = "\t".join([file3_list[i],file4_list[i]])
    s+="\n"
    main_file.append(s)
file3 = open("three.txt","w")
file3.writelines(main_file)

https://www.cnblogs.com/san357/p/13882638.html

六、Pycharm使用豆瓣数据源安装第三方库

pip install django-filter==2.0.0 -ihttp://pypi.douban.com/simple --trusted-host pypi.douban.com

https://www.cnblogs.com/gcgc/p/13931585.html
数据源集合:

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/ 

豆瓣:http://pypi.douban.com/simple/

七、Pandas使用to_csv和read_csv中遇到的索引问题

1、问题描述: 使用numpy和pandas将txt文件转换成csv格式,然后读取csv时会多出来一列索引。该列没有列名,影响数据处理!
2、将txt转换成csv代码(简洁方法)

import pandas as pd
import numpy as np
# 使用numpy读取txt文件
txt = np.loadtxt("conf_train2id_feature.txt")
# pandas读取numpy格式的txt
txtDF = pd.DataFrame(txt, columns=['spf', 'pof', 'cos', 's_ent', 'o_ent', 's_re', 'o_re', 'in_s', 'out_s', 'in_o', 'out_o', 'depth', 'category'])
# 转换成csv格式
txtDF.to_csv("conf_train2id_feature.csv")

3、使用上述代码的问题: 转换之后使用pd.read_csv()读取csv文件会多出一列索引。
解决方式:

# 声明文件第一列为索引,第一行为列名(默认就是,不必重新申明)
df = pd.read_csv("conf_train2id_feature.csv", index_col=0, header=0)

https://blog.csdn.net/kwame211/article/details/80982840

八、格式化输出

https://blog.csdn.net/liuyingying0418/article/details/88257007

九、测试集与训练集的划分以及StratifiedShuffleSplit的使用

1、交叉验证
交叉验证法(cross validation)先将数据集D划分为k个大小相似的互斥子集.每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可以获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个 测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法成为"k折交叉验证"(k-fold cross validation).k最常用的取值是10,其他常用的k值有5 20等。

与留出法相似,将数据集D划分为k个子集同样存在多种划分方式。为减小因样本划分不同而引入的偏差,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的有"10次10折交叉验证"

假定数据集D中包含m个样本,若令k=m,则得到了交叉验证法的一个特例:留一法(Leave One Out).显然,留一法不受随机样本划分方式的影响。因为m个样本只有唯一的方式划分为m个子集(每个子集包含一个样本);留一法中被实际评估的模型与期望评估的用D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。然而 留一法也有其缺陷:在数据集比较大时,训练m个模型的计算开销可能时难以忍受的(例如数据集包含1百万个样本,则需要训练1百万个模型),而这还是在未考虑算法调参的情况下。另外,留一法的估计结果也未必永远比其他评估方法准确;“没有免费的午餐”定义对实验评估方法同样使用。

2、使用StratifiedShuffleSplit进行分层抽样以及交叉验证
融合了StratifiedKFold和ShuffleSplit两个函数的功能,该对象返回分层随机折,对像通过对每一类保留一定比例的样本生成折。注意:同随机分割一样,分层随机分割不保证所有折都是不同的,即使对于大数据集也不例外。
http://www.cppcns.com/jiaoben/python/247034.html
https://blog.csdn.net/u012193416/article/details/79313601

十、python中的切片问题

https://www.cnblogs.com/malinqing/p/11272485.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值