如果您创建了一个 DataFrame 或修改了已有的 DataFrame,可能希望将其导出,方便他人使用,或留作今后工作之用。比如,您可能需要向评审提交机器学习项目的预测结果,或将修改后的数据集发给同事。
在 Python 中,您可以使用 Pandas 的 .to_csv() 方法将 DataFrame 导出为 CSV 文件。
在本文中,我将带您完成主要步骤,并解释该方法的各个参数。
如果您想进一步学习 Pandas,可以看看这门课程: 使用 Pandas 进行数据处理 。
我会先给赶时间的读者一个快速答案,然后再展开细节。
简短回答:如何将 Pandas DataFrame 保存为 CSV
要将 Pandas DataFrame 保存为 CSV,请使用 DataFrame.to_csv() 方法:
df. to_csv( 'your_file_name.csv' , index= False ) 技术支持
将 'your_file_name.csv' 替换为您想要的文件名和路径。参数 index=False 可防止 Pandas 向 CSV 中添加索引列。
创建一个 Pandas DataFrame
现在来看更完整的答案。我不会从零构建 DataFrame,而是导入一个数据集,对其进行修改,然后将结果 DataFrame 以 CSV 格式保存。第一步是导入所需库:
import pandas as pd
import seaborn as sns
from sklearn. preprocessing import MinMaxScaler技术支持
接着,我们可以导入一个 seaborn 数据集。导入的数据集已经是 Pandas DataFrame,因此无需转换。
df = sns. load_dataset( 'titanic' )
print ( df. head( ) ) 技术支持
survived pclass sex age sibsp parch fare embarked class
0 0 3 male 22.0 1 0 7.2500 S Third
1 1 1 female 38.0 1 0 71.2833 C First
2 1 3 female 26.0 0 0 7.9250 S Third
3 1 1 female 35.0 1 0 53.1000 S First
4 0 3 male 35.0 0 0 8.0500 S Third
who adult_male deck embark_town alive alone
0 man True NaN Southampton no False
1 woman False C Cherbourg yes False
2 woman False NaN Southampton yes True
3 woman False C Southampton yes False
4 man True NaN Southampton no True 技术支持
修改一个 Pandas DataFrame
现在,我们做一些处理来得到一个新的 DataFrame。由于我的目的是讲解 Pandas 的 .to_csv() 方法,我只对数值型变量做最小-最大归一化。
scaler = MinMaxScaler( )
numerical columns - df. select_dtypes( include= [ 'float64' , 'int64' ] ) . columns
new_df = df. copy( )
new_df[ numerical_columns] = scaler. fit_transform( df[ numerical_columns] )
print ( new_df. head( ) ) 技术支持
survived pclass sex age sibsp parch fare embarked
0 0.0 1.0 male 0.271174 0.125 0.0 0.014151 S
1 1.0 0.0 female 0.472229 0.125 0.0 0.139136 C
2 1.0 1.0 female 0.321438 0.000 0.0 0.015469 S
3 1.0 0.0 female 0.434531 0.125 0.0 0.103644 S
4 0.0 1.0 male 0.434531 0.000 0.0 0.015713 S
class who adult_male deck embark_town alive alone
Third man True NaN Southampton no False
First woman False C Cherbourg yes False
Third woman False NaN Southampton yes True
First woman False C Southampton yes False
Third man True NaN Southampton no True 技术支持
将 Pandas DataFrame 保存为 CSV
我们将使用 DataFrame.to_csv() 方法将修改后的 DataFrame 保存为 CSV 文件。
new_df. to_csv( 'new_titanic.csv' ) 技术支持
这会将 CSV 文件保存在当前目录。如果您需要复习,请阅读这篇教程: 如何在 Python 中获取当前目录 。
我调用该方法的方式使所有参数均为默认值。现在,我将介绍这些参数,以及如何根据需要调整它们的取值。
DataFrame.to_csv() 的参数详解
下面列出了同一个 .to_csv() 方法的所有参数:
new_df. to_csv(
path_or_buf= 'new_titanic.csv' ,
sep= ',' ,
na_rep= '' ,
float_format= None ,
columns= [ ] ,
header= True ,
index= True ,
index_label= None ,
mode= 'w' ,
encoding= 'utf-8' ,
quoting= csv. QUOTE_MINIMAL,
lineterminator= os. linesep,
storage_options= { } ,
compression= 'infer' ,
quotechar= '' ,
chunksize= None ,
date_format= None ,
doublequote= True ,
escapechar= None ,
decimal= '.' ,
errors= 'strict'
) 技术支持
其中一些参数是可选的,如 columns、encoding、 quoting、 lineterminator 和 storage_options,因此我只是为它们设置了值,不一定是默认值。
第一个参数可以是字符串(即文件名),也可以是文件对象。请看下面的示例:
with open ( 'new_titanic.csv' , 'w' , encoding = 'utf=8' ) as file :
new_df. to_csv( file ) 技术支持
分隔符与缺失值
下一个参数是分隔符,用于指定数据如何分隔。默认分隔符是逗号,但我们可以将其改为制表符或分号。当导出的数据需要特定格式时,使用制表符或分号会很有用。此外,对于包含逗号的数据(如文本),使用逗号作为分隔符可能会带来不必要的变化。
例如,如果您有 “Hello, world” 这样的数据点,那么在使用逗号作为分隔符时,您还需要使用引号来保证它作为单个数据点。改用制表符或分号可能是更好的选择,因为与逗号加引号相比,它可能占用更少内存。
new_df. to_csv( 'new_titanic.csv' , sep = '\t' )
new_df_tab = pd. read_csv( 'new_titanic.csv' ) 技术支持
0\t0\t3\tmale\t22.0\t1\t0\t7.25\tS\tThird\tman...
1\t1\t1\tfemale\t38.0\t1\t0\t71.2833\tC\tFirst...
2\t1\t3\tfemale\t26.0\t0\t0\t7.925\tS\tThird\t...
3\t1\t1\tfemale\t35.0\t1\t0\t53.1\tS\tFirst\tw...
4\t0\t3\tmale\t35.0\t0\t0\t8.05\tS\tThird\tman... 技术支持
第三个参数 na_rep 用于指定缺失值的表示方式。常见做法是将单元格留空,或填入 “NaN” 或 “Na”,但您也可以插入自定义字符串。下面的示例中,我为每个缺失值插入 “Datacamp”。
new_df. to_csv( 'new_titanic.csv' , na_rep= 'Datacamp' )
new_df_datacamp = pd. read_csv( 'new_titanic.csv' )
new_df_datacamp = pd. DataFrame( new_df_datacamp)
missing_values = new_df_datacamp. isnull( ) . sum ( )
print ( missing_values) 技术支持
survived 0
pclass 0
sex 0
age 177
sibsp 0
parch 0
fare 0
embarked 2
class 0
who 0
adult_male 0
deck 688
embark_town 2
alive 0
alone 0技术支持
处理列与索引
让我们看看 age 列中的缺失值是如何表示的:
print ( new_df_datacamp[ 'age' ] [ : 10 ] ) 技术支持
0.2711736617240512
0.4722292033174164
0.32143754712239253
0.4345312892686604
0.4345312892686604
Datacamp
0.6732847449107816
0.01985423473234481
0.33400351847197784
0.17064589092736868技术支持
如果您希望更少的小数位,可使用 float_format 参数来指定小数位数。这里我们只保留三位小数。
new_df. to_csv( 'new_titanic.csv' , na_rep= 'Datacamp' , float_format= '%.3f' )
new_df_datacamp = pd. read_csv( 'new_titanic.csv' )
new_df_datacamp = pd. DataFrame( new_df_datacamp)
print ( new_df_datacamp[ 'age' ] [ : 10 ] ) 技术支持
0.271
0.472
0.321
0.435
0.435
Datacamp
0.673
0.020
0.334
0.171技术支持
如果您不想 看到索引,请将 index 参数设为 False。
您还可以通过 header 参数决定是否保留列名,设置为 True 或 False 即可(也可以自定义列名)。
columns 参数允许您选择要保留的列。index_label 参数允许为索引列设置名称,或在多级索引时设置名称列表。
new_df. to_csv(
'new_titanic.csv' ,
index= True ,
header= True ,
columns= [ 'age' , 'alive' ] ,
index_label= 'Index'
)
new_df = pd. read_csv( 'new_titanic.csv' )
new_df = pd. DataFrame( new_df)
print ( new_df. head( ) ) 技术支持
Index age alive
0 0.271174 no
1 0.472229 yes
2 0.321438 yes
3 0.434531 yes
4 0.434531 no技术支持
文件打开方式、编码与压缩
参数 mode 用于决定当已存在同名 CSV 文件时如何处理。如果将其设为 “w”,且已存在 new_titanic.csv 文件,那么新文件会替换旧文件。若设为 “x”,则仅当不存在同名文件时才创建新文件。最后,若设为 “a”,则会将新内容追加到同名旧文件之后(例如您只想新增一些行)。
编码参数用于设置新文件的编码方式。如果您的数据包含特殊字符(例如其他字母表的字符),可以将其设置为 “utf-8” 或其他编码。
compression 参数用于设置新文件的压缩方式。默认值为 “infer”,即根据文件扩展名推断压缩方式,您也可以显式指定所需的压缩格式。
new_df. to_csv( 'new_titanic.csv.gz' )
new_df. to_csv( 'new_data.csv.gz' , compression= 'gzip' )
new_df. to_csv(
'new_data.zip' ,
compression= {
'method' : 'zip' ,
'archive_name' : 'data.csv'
}
) 技术支持
如何使用引号
quoting 参数用于设置哪些数据需要加引号。正如前面所说,当分隔符为逗号且单元格中也包含逗号(如文本)时,您需要决定哪些字段加引号。
new_df. to_csv( 'new_titanic.csv' , quoting= csv. QUOTE_MINIMAL)
new_df. to_csv( 'new_titanic.csv' , quoting= csv. QUOTE_ALL)
new_df. to_csv( 'new_titanic.csv' , quoting= csv. QUOTE_NONNUMERIC)
new_df. to_csv( 'new_titanic.csv' , quoting= csv. QUOTE_NONE) 技术支持
块大小与日期时间数据
参数 chunksize 指定每次写入的行数。若使用默认值,则一次性写入所有行;当文件很大时,您可以指定一个数字以分块写入。
参数 date_format 用于设置 datetime 对象的表示形式。您可以使用 strftime 格式进行指定。
new_df. to_csv( 'new_titanic.csv' , date_format= '%m/%d/%Y' )
new_df. to_csv( 'new_titanic.csv' , date_format= '%Y-%m-%d %H:%M:%S' ) 技术支持
总结
希望现在您已经可以按照自己的需求,将 DataFrame 导出为合适的格式!
鼓励您继续学习——下面是一些可供尝试的资源:
如果您创建了一个 DataFrame 或修改了已有的 DataFrame,可能希望将其导出,方便他人使用,或留作今后工作之用。比如,您可能需要向评审提交机器学习项目的预测结果,或将修改后的数据集发给同事。
在 Python 中,您可以使用 Pandas 的
.to_csv()方法将 DataFrame 导出为 CSV 文件。在本文中,我将带您完成主要步骤,并解释该方法的各个参数。
如果您想进一步学习 Pandas,可以看看这门课程:使用 Pandas 进行数据处理。
我会先给赶时间的读者一个快速答案,然后再展开细节。
简短回答:如何将 Pandas DataFrame 保存为 CSV
要将 Pandas DataFrame 保存为 CSV,请使用
DataFrame.to_csv()方法:将
'your_file_name.csv'替换为您想要的文件名和路径。参数index=False可防止 Pandas 向 CSV 中添加索引列。创建一个 Pandas DataFrame
现在来看更完整的答案。我不会从零构建 DataFrame,而是导入一个数据集,对其进行修改,然后将结果 DataFrame 以 CSV 格式保存。第一步是导入所需库:
接着,我们可以导入一个
seaborn数据集。导入的数据集已经是 Pandas DataFrame,因此无需转换。修改一个 Pandas DataFrame
现在,我们做一些处理来得到一个新的 DataFrame。由于我的目的是讲解 Pandas 的
.to_csv()方法,我只对数值型变量做最小-最大归一化。将 Pandas DataFrame 保存为 CSV
我们将使用
DataFrame.to_csv()方法将修改后的 DataFrame 保存为 CSV 文件。这会将 CSV 文件保存在当前目录。如果您需要复习,请阅读这篇教程:如何在 Python 中获取当前目录。
我调用该方法的方式使所有参数均为默认值。现在,我将介绍这些参数,以及如何根据需要调整它们的取值。
DataFrame.to_csv()的参数详解下面列出了同一个
.to_csv()方法的所有参数:其中一些参数是可选的,如
columns、encoding、quoting、lineterminator和storage_options,因此我只是为它们设置了值,不一定是默认值。第一个参数可以是字符串(即文件名),也可以是文件对象。请看下面的示例:
分隔符与缺失值
下一个参数是分隔符,用于指定数据如何分隔。默认分隔符是逗号,但我们可以将其改为制表符或分号。当导出的数据需要特定格式时,使用制表符或分号会很有用。此外,对于包含逗号的数据(如文本),使用逗号作为分隔符可能会带来不必要的变化。
例如,如果您有“Hello, world” 这样的数据点,那么在使用逗号作为分隔符时,您还需要使用引号来保证它作为单个数据点。改用制表符或分号可能是更好的选择,因为与逗号加引号相比,它可能占用更少内存。
第三个参数
na_rep用于指定缺失值的表示方式。常见做法是将单元格留空,或填入“NaN”或“Na”,但您也可以插入自定义字符串。下面的示例中,我为每个缺失值插入“Datacamp”。处理列与索引
让我们看看
age列中的缺失值是如何表示的:如果您希望更少的小数位,可使用
float_format参数来指定小数位数。这里我们只保留三位小数。如果您不想看到索引,请将
index参数设为False。您还可以通过
header参数决定是否保留列名,设置为True或False即可(也可以自定义列名)。columns参数允许您选择要保留的列。index_label参数允许为索引列设置名称,或在多级索引时设置名称列表。文件打开方式、编码与压缩
参数
mode用于决定当已存在同名 CSV 文件时如何处理。如果将其设为“w”,且已存在new_titanic.csv文件,那么新文件会替换旧文件。若设为“x”,则仅当不存在同名文件时才创建新文件。最后,若设为“a”,则会将新内容追加到同名旧文件之后(例如您只想新增一些行)。编码参数用于设置新文件的编码方式。如果您的数据包含特殊字符(例如其他字母表的字符),可以将其设置为
“utf-8”或其他编码。compression参数用于设置新文件的压缩方式。默认值为“infer”,即根据文件扩展名推断压缩方式,您也可以显式指定所需的压缩格式。如何使用引号
quoting参数用于设置哪些数据需要加引号。正如前面所说,当分隔符为逗号且单元格中也包含逗号(如文本)时,您需要决定哪些字段加引号。块大小与日期时间数据
参数
chunksize指定每次写入的行数。若使用默认值,则一次性写入所有行;当文件很大时,您可以指定一个数字以分块写入。参数
date_format用于设置 datetime 对象的表示形式。您可以使用 strftime 格式进行指定。总结
希望现在您已经可以按照自己的需求,将 DataFrame 导出为合适的格式!
鼓励您继续学习——下面是一些可供尝试的资源: