python位置参数错误_python 难点错误调试(1)

本文主要介绍了Python编程中遇到的几个典型错误及其解决方案,包括路径错误、内存错误、DataFrame重构错误以及Spyder调试界面不显示的问题。针对路径错误,解决方法是通过改变工作目录;内存错误可通过显式调用`gc.collect()`来释放内存;DataFrame的索引重构,可采取创建新DataFrame的方式;而Spyder调试界面不显示,解决方法是修正`reload(sys)`后的输出路径并重启Spyder。
摘要由CSDN通过智能技术生成

一、路径错误

Python3 pandas read_csv 报错:IOError: Initializing from file failed

Python3使用read_csv的时候,如果传入的参数不是文件名而是文件的路径,就会报这个错。

原因应该是这个库的问题,解决方法是,先切换到这个目录,然后传文件名作为参数。

出错代码:

import pandas as pd

trainFile = "F:/Projects/Python/coursera/intro-to-data-science/kaggle/data/train.csv"

trainData = pd.read_csv(trainFile)

改进代码:

import pandas as pd

import os

trainFile = "F:/Projects/Python/coursera/intro-to-data-science/kaggle/data/train.csv"

pwd = os.getcwd()

os.chdir(os.path.dirname(trainFile))

trainData = pd.read_csv(os.path.basename(trainFile))

os.chdir(pwd)

二、内存错误

数据分析中,调用的变量过多的话,需要先del掉一些变量,再显式调用gc.collect().

python话说会自己管理内存,实际上,对于占用很大内存的对象,并不会马上释放。举例,a=range(10000*10000),会发现内存飙升一个多G,del a 或者a=[]都不能将内存降下来。。

del 可以删除多个变量,del a,b,c,d

办法:

import gc (garbage collector)

del a

gc.collect()

三、df重构错误

在使用pandas进行数据操作时遇到了如下问题:

首先对数据进行了抽取:

equ_data = equ_data[equ_data["link_id"] == link_id]

抽取完之后equ_data的index 变成了乱序的,如下:

log_time ratio

16626 2018/2/25 18:44:06 0.00

16650 2018/2/25 18:59:52 0.00

16668 2018/2/25 19:04:52 0.00

16692 2018/2/25 19:09:52 0.00

16705 2018/2/25 19:14:52 0.00

希望把equ_data的index 变成range(len(equ_data)),如下:

log_time ratio

0 2018/2/25 18:44:06 0.00

1 2018/2/25 18:59:52 0.00

2 2018/2/25 19:04:52 0.00

3 2018/2/25 19:09:52 0.00

4 2018/2/25 19:14:52 0.00

尝试了网上的做法,re_index()是用来更新index顺序的,并不能修改index。

equ_data= equ_data.reindex(index=range(len(equ_data)))

并且,reindex()会增加更多的index,其他列值可以设置为NAN,或bfill(向前填充),backfill(向后填充)。

df.reindex(index=list, fill_value=0)

df.reindex(index=list, method='bfill')

rename()方法可以修改列名和index名,但必须一一指定,如下:

test.rename(columns={"log_time":"Log_time", "ratio1":"Ratio1"}, inplace=True)

test.rename(index={16626:0}, inplace=True)

效果如下:

Log_time Ratio

0 2018/2/25 18:44:06 0.00

16650 2018/2/25 18:59:52 0.00

16668 2018/2/25 19:04:52 0.00

16692 2018/2/25 19:09:52 0.00

16705 2018/2/25 19:14:52 0.00

不可能对所有的index都一一指定,所以该方法不可行。

最后想到重新构建DataFrame:

data = {"log_time": pd.Series(equ_data["log_time"].values),

"ratio1": pd.Series(equ_data["ratio1"].values)}

new_df = pd.DataFrame(data)

四、spyder调试界面不显示

是reload(sys)的问题

import sys

# reload改变了输出路径,需要改正回来

sto,stin = sys.stdout,sys.stdin

reload(sys)

sys.setdefaultencoding('utf-8')

sys.stdout,sys.stdin = sto,stin

然后重新启动spyder即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值