Hi:我正在尝试使用PandasDataFrame.to_csv方法将dataframe保存为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
eivgtgni1#
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)
如果您需要经常这样做,可以很容易地将其封装在函数中。
kq4fsx7k2#
这里有一个替代方法,使用优秀的标准库pathlib模块,它通常使事情变得更整洁。正如其他地方所解释的,to_csv将创建文件(如果它不存在),但是***不会***在文件路径中创建任何不存在的目录,因此您需要首先确保这些目录存在。
pathlib
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意味着如果目录已经存在,它不会引发错误,因此您不必显式地单独检查。
parents=True
exist_ok=True
zwghvu4y3#
当我不小心在保存路径的请求处添加了file://时,我遇到了这个错误。既然搜索把我带到了这里,可能对某些人也有帮助。
file://
xyhw6mcr4#
在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)
通过在Path()中使用文件的完整路径,它将指向该文件,因此我们需要在.mkdir之前调用.parent,以避免创建一个以我们的文件名命名的目录。
ccgok5k55#
将"csv"文件从jupyter保存到桌面:
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)
5条答案
按热度按时间eivgtgni1#
to_csv
确实会创建不存在的文件,但不会创建不存在的目录。请确保您尝试保存文件的子目录已先创建。我在工作中经常这样做:
如果您需要经常这样做,可以很容易地将其封装在函数中。
kq4fsx7k2#
这里有一个替代方法,使用优秀的标准库
pathlib
模块,它通常使事情变得更整洁。正如其他地方所解释的,
to_csv
将创建文件(如果它不存在),但是***不会***在文件路径中创建任何不存在的目录,因此您需要首先确保这些目录存在。设置
parents=True
还将创建任何必要的父目录,exist_ok=True
意味着如果目录已经存在,它不会引发错误,因此您不必显式地单独检查。zwghvu4y3#
当我不小心在保存路径的请求处添加了
file://
时,我遇到了这个错误。既然搜索把我带到了这里,可能对某些人也有帮助。xyhw6mcr4#
在Tim的答案中添加一个,如果你在一个字符串中包含了整个文件路径,你可以使用这个修改后的版本:
通过在Path()中使用文件的完整路径,它将指向该文件,因此我们需要在.mkdir之前调用.parent,以避免创建一个以我们的文件名命名的目录。
ccgok5k55#
将"csv"文件从jupyter保存到桌面:
例如: