你好:我正在尝试使用 Pandas
的 DataFrame.to_csv
方法将一个 dataframe
保存到一个 csv
文件中:
filename = './dir/name.csv'
df.to_csv(filename)
然而,我遇到了错误:
IOError: [Errno 2] No such file or directory: './dir/name.csv'
to_csv
方法不能自动创建文件,这正是我希望它能做到的。
你好:我正在尝试使用 Pandas
的 DataFrame.to_csv
方法将一个 dataframe
保存到一个 csv
文件中:
filename = './dir/name.csv'
df.to_csv(filename)
然而,我遇到了错误:
IOError: [Errno 2] No such file or directory: './dir/name.csv'
to_csv
方法不能自动创建文件,这正是我希望它能做到的。
to_csv
会像你所说的那样,如果文件不存在,它会创建文件,但它不会创建不存在的目录。请确保先创建您要保存文件的子目录。
我在工作中经常这样做:
import os
outname = 'name.csv'
outdir = './dir'
if not os.path.exists(outdir):
os.mkdir(outdir)
fullname = os.path.join(outdir, outname)
df.to_csv(fullname)
如果您需要经常执行此操作,这可以轻松地封装为一个函数。
这里有一种使用优秀的标准库 pathlib
模块完成此操作的替代方法,通常会使事情更加整洁。
如其他地方所解释的那样,to_csv
会在不存在时创建该文件,但不会在文件路径中创建任何不存在的目录,因此您需要首先确保这些目录存在。
from pathlib import Path
output_file = 'my_file.csv'
output_dir = Path('long_path/to/my_dir')
output_dir.mkdir(parents=True, exist_ok=True)
df.to_csv(output_dir / output_file) # can join path elements with / operator
如果设置 parents=True
,还将创建任何必要的父目录,而 exist_ok=True
表示如果目录已经存在,则不会引发错误,因此您不必明确检查该目录是否存在。
pathlib
简直是太棒了!:D - Timos.makedirs('long_path/to/my_dir', exist_ok=True)
完成完全相同的操作-具有完全相同的行为。但如果你喜欢面向对象的方法,pathlib
也是没有问题的选择! - qRTPCRpathlib
而已。作为一个英国人,我必须承认它非常适合我!☕ - Tim当我把file://
误加在保存路径开头时,我遇到了这个错误。既然搜索结果将我带到了这里,可能对其他人也有帮助。
pd.read_csv
没有file://
前缀的问题,但是不知道为什么to_csv
会有问题。 - kmiller96在Tim的答案上进行补充,如果你有整个文件路径在一个字符串中,可以使用这个修改版:
from pathlib import Path
output_file = '/tmp/long_path/to/my_dir/my_file.csv'
output_file_path = Path(output_file)
output_file_path.parent.mkdir(parents=True, exist_ok=True)
df.to_csv(output_file)
将 Jupyter 中的 'csv' 文件保存到桌面:
df.to_csv(r'your directory\your file name.csv', index=False)
例如:
df5.to_csv(r'C:\Users\Asus\Desktop\DataSets\compounds\inactive_compounds.csv', index=False)
os.mkdir
只创建一个直接的目录。如果路径中存在多层不存在的目录,请使用os.makedirs
。但是请注意,如果叶子节点已经存在,则会抛出一个OSError
。 - mz8iexist_ok=True
调用os.makedirs
以避免错误。 - stiaan