我正在将大量财务时间序列数据写入单个CSV文件。在一个实例中,我发现to_csv方法反复失败,但是我无法一生找出原因。在调用to_csv方法期间,所有操作都将挂起10-15分钟以上。在发生错误前崩溃:
回溯(最近一次通话):文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ formats \ csvs.py”,行172,保存在self._save()文件“ C:\ ProgramData _save self._save_header()文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ formats中的\ Anaconda3 \ lib \ site-packages \ pandas \ io \ formats \ csvs.py”,第274行\ csvs.py“,第242行,在_save_header writer.writerow(encoded_labels)OSError中:[Errno 22]无效的参数
在处理上述异常期间,发生了另一个异常:
OSError:[Errno 22]无效的参数
在处理上述异常期间,发生了另一个异常:
追溯(最近一次通话最后一次):文件“ securitiesArchives.py”,行1072,位于out_df.to_csv(“ PRN.csv”,mode ='w',encoding ='UTF-8',压缩=无)文件“ C :\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ generic.py“,第3020行,位于to_csv formatter.save()文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ format \ csvs.py“,行f187,保存f.close()OSError:[Errno 22]无效的参数
写入csv文件的标题行时似乎正在挂断。我将相同的帧写入hdf,然后从hdf加载,并使用hdf加载的帧重现了相同(或非常接近)的故障:
回溯(最近一次通话):文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ formats \ csvs.py”,行172,保存在self._save()文件“ C:\ ProgramData _save self._save_header()文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ formats中的\ Anaconda3 \ lib \ site-packages \ pandas \ io \ formats \ csvs.py”,第274行\ csvs.py”,_ save_header writer.writerow(encoded_labels)中的第242行,PermissionError:[Errno 13]权限被拒绝
在处理上述异常期间,发生了另一个异常:
PermissionError:[Errno 13]权限被拒绝
在处理上述异常期间,发生了另一个异常:
追溯(最近一次通话最近):文件“ bad_archive.py”,第12行,在#out_df.to_csv(“ PRN.csv”,mode ='w',encoding ='UTF-8',compression = None)中,文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ generic.py“,第3020行,位于to_csv formatter.save()文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ formats \ csvs.py”,行187,在保存f.close()中PermissionError:[Errno 13]权限被拒绝
从较大的代码体转移到较小的示例问题时,不确定为什么将其从“ OSError:[Errno 22]无效参数”更改为“ PermissionError:[Errno 13]权限被拒绝”的原因。我搜索了与方法to_csv相关的这些错误,并发现以前版本的熊猫可能有类似的问题,但是应该在以后的版本中解决。我的熊猫是:
安装版本------------------提交:无python:3.7.3.final.0 python位:64 OS:Windows OS版本:10计算机:AMD64处理器: Intel64家族6模型94第3步,正版英特尔字节序:小LC_ALL:无LANG:无LOCALE:无。无
大熊猫:0.24.2 pytest:5.0.1点:19.1.1 setuptools:41.0.1 Cython:0.29.12 numpy:1.16.4 scipy:1.2.1 pyarrow:无xarray:无IPython:7.6.1 sphinx:2.1。 2 patsy:0.5.1 dateutil:2.8.0 pytz:2019.1 blosc:无瓶颈:1.2.1表:3.5.2 numexpr:2.6.9羽毛:无matplotlib:3.1.0 openpyxl:2.6.2 xlrd:1.2.0 xlwt:1.3.0 xlsxwriter:1.1.8 lxml.etree:4.3.4 bs4:4.7.1 html5lib:1.0.1 sqlalchemy:1.3.5 pymysql:无psycopg2:无jinja2:2.10.1 s3fs:无fastparquet:无pandas_gbq :无pandas_datareader:0.8.1 gcsfs:无
我在使用Anaconda Python 3.7.3的Win-10 64位计算机上(默认值,Apr 24 2019,15:29:51)[MSC v.1915 64位(AMD64)] ::在Win32上的Anaconda,Inc.
我试过了:
out_df.loc[out_df.index.values[0]].to_csv("PRN.csv",mode='w',encoding='UTF-8' ,compression=None)
这也失败了。即使这是一个系列,也不再是框架,因为产生了以下警告
FutureWarning:的签名与的签名
Series.to_csv
对齐DataFrame.to_csv
,并且参数“标头”会将其默认值从False更改为True:请传递一个明确的值以禁止显示此警告。
拒绝与to_csv合作的整个两行DataFrame out_df.loc[out_df.index.values[0]:out_df.index.values[1]].to_csv("PRN.csv",mode='w',encoding='UTF-8' ,compression=None,index=False,header=False)
但这也像以前一样失败了。但是,我能够将每个列的顺序独立地写入其自己的CSV文件,而不会出现问题。
for col_name in out_df.columns:
print('Writing '+col_name+' as CSV')
out_df[col_name].to_csv(col_name.replace(' ','_')+"_PRN.csv",mode='w',encoding='UTF-8' ,compression=None)
print('Done.')
结合上述成功和两行写入尝试的失败,我认为这与特定列值无关。此外,回溯使我认为此问题与编写列标题有关。但是,问题是我有3000多个其他DataFrame,它们具有完全相同的列标签,并且它们使用to_csv写入csv没有问题。在这一点上,我超出了我的深度。
无论我使用的是写到hdf的数据还是使用yfinance的yahoo的最新提取,重复失败都会在同一组数据上发生。以下代码在我的系统上可靠地重现了该问题:
import pandas as pd
import yfinance as yf
good_df = yf.download(tickers='AAPL',interval='1m',period='7d')
bad_df = yf.download(tickers='PRN',interval='1m',period='7d')
print('Writing test case AAPL as CSV')
good_df.to_csv("AAPL.csv",mode='w',encoding='UTF-8' ,compression=None)
print('Writing test case PRN as CSV')
bad_df.to_csv("PRN.csv",mode='w',encoding='UTF-8' ,compression=None)
谁有想法?
PS-重新阅读时,我决定检查列标签的等效性,并且就布尔比较而言,“好”数据框的值与“坏”数据框的值相同。
>>>print(good_df.columns)
Index(['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'], dtype='object')
>>>print(bad_df.columns)
Index(['Open', 'High', 'Low', 'Close', 'Adj Close','Volume'], dtype='object')
>>>print(good_df.columns == bad_df.columns)
[ True True True True True True]
PPS-我也尝试过从to_csv中删除所有标志,尽管它们应该是默认值。它是其他代码中使用的遗留物,我正在研究不同的值以查看它是否有效。最基本的to_csv调用像以前一样失败
import pandas as pd
import yfinance as yf
good_df = yf.download(tickers='AAPL',interval='1m',period='7d')
bad_df = yf.download(tickers='PRN',interval='1m',period='7d')
print('Writing test case AAPL as CSV')
good_df.to_csv("AAPL.csv")
print('Writing test case PRN as CSV')
bad_df.to_csv("PRN.csv")
我在资源管理器中或控制台中的目录中都看不到文件。但是为了测试这一点,我使用了一个新文件名,该文件名不是符号“ PRN”,因此可以正常工作。
我不认为这是问题所在,因为我已经尝试在较大的父代码中然后在玩具问题中写入另一个目标文件夹。两者都不起作用。
似乎Windows对任何名为“ PRN.csv”的旧文件都有旧引用,或……令人沮丧。希望可以通过简单的重新启动来解决它。
谢谢!
我今天早些时候确实遇到了同样的问题,但是由于我使用的数据要小得多,因此更容易发现解决方案。
在另一个程序中打开文件时,您将无法写入或追加文件。检查您可能忘记的地方,close()
或者是否可以在Microsoft Excel中查看。
同样,通常最好使用open('file', 'a')
写入的方式来存储以前存储的任何数据。如果不是,它将执行open('file','w')
与创建新文件相同的操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句