34_Pandas对CSV文件内容的导出和添加(to_csv)

34_Pandas对CSV文件内容的导出和添加(to_csv)

如果要将panda.DataFrame或pandas.Series数据导出为csv文件或将其添加到现有的csv文件中,请使用to_csv()方法。由于分隔符可以更改,因此也可以将其另存为tsv文件。

将描述以下内容。

  • 使用to_csv()方法导出并保存csv文件
  • 仅导出特定列:参数columns
  • 有/无标头,索引:参数header,index
  • 编码:参数encoding
  • 分隔符:参数sep
  • 写入模式(新建,覆盖,添加):参数mode
  • float浮点格式:参数float_format
  • 转换为任何格式并保存

读取csv文件请参阅以下文章。

以下面的数据为例。

import pandas as pd

df = pd.read_csv('./data/34/sample_pandas_normal.csv', index_col=0)

print(df)
#          age state  point
# name
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

使用to_csv()方法导出并保存csv文件

panda.DataFrame或pandas.Series提供To_csv()方法。

将路径指定为第一个参数,则将输出csv文件。

df.to_csv('./data/34/to_csv_out.csv')

仅导出特定列:参数columns

如果只想导出特定的列,在参数列中指定列名称的列表。
默认值为“none”,所有列均输出。

df.to_csv('./data/34/to_csv_out_columns.csv', columns=['age'])

有/无标头,索引:参数header,index

在参数header和index中使用True或False指定是否指定header(列名,pandas.DataFrame的列)和index(行名,pandas.DataFrame的索引)。默认值为True。

df.to_csv('./data/34/to_csv_out_header_index.csv', header=False, index=False)

编码:参数encoding

输出文件的编码由参数编码指定。 对于Python3,默认值为utf-8。

分隔符:参数sep

分隔符由参数sep指定。 如果要将其另存为由制表符\t分隔的tsv文件,请进行以下设置。

默认值为逗号“,”。

df.to_csv('./data/34/to_csv_out.tsv', sep='\t')

写入模式(新建,覆盖,添加):参数mode

写入模式由参数mode指定。

默认值为“ w”。与前面的示例一样,如果指定的路径不存在,则将重新创建该路径,如果存在,则将其覆盖。

与内置函数open()一样,如果要防止覆盖现有文件,请设置mode =‘x’。如果指定的路径不存在,将创建一个新路径,如果存在,则将发生错误。

如果在to_csv()方法的第一个参数中指定了现有csv文件的路径后指定了mode =‘a’,则会添加该文件。仅将pandas.DataFrame的内容添加到现有文件的末尾。

显示了将相同数据添加到文件后立即保存的示例。请注意,如果未设置header = False,则将按原样添加标头(pandas.DataFrame的列)。

df.to_csv('./data/34/to_csv_out_a.csv')
df.to_csv('./data/34/to_csv_out_a.csv', mode='a', header=False)

如果要从现有的csv文件中读取数据并通过代码处理将具有通过代码处理添加/更新的行和列的DataFrame写入具有相同名称的文件,则可以使用mode ='w’覆盖它(可以将其省略,因为它是默认设置)。

df.to_csv('./data/34/to_csv_out_a_new_column.csv')

df = pd.read_csv('./data/34/to_csv_out_a_new_column.csv', index_col=0)

print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

df['new_col'] = 'new data'

print(df)
#          age state  point   new_col
# name                               
# Alice     24    NY     64  new data
# Bob       42    CA     92  new data
# Charlie   18    CA     70  new data
# Dave      68    TX     70  new data
# Ellen     24    CA     88  new data
# Frank     30    NY     57  new data

df.to_csv('./data/34/to_csv_out_a_new_column.csv')

float浮点格式:参数float_format

以下面的pandas.DataFrame为例。

df = pd.DataFrame({'col1': [0.123456789, 1000000000.0],
                   'col2': [123456789.0, 0.0],
                   'col3': [123456789, 0]})
print(df)
#            col1         col2       col3
# 0  1.234568e-01  123456789.0  123456789
# 1  1.000000e+09          0.0          0

print(df.dtypes)
# col1    float64
# col2    float64
# col3      int64
# dtype: object

尽管它在print()中以指数符号显示,但这是由于显示设置所致,并且值本身未四舍五入。

print(df.iat[0, 0])
# 0.123456789

print(df.iat[1, 0])
# 1000000000.0

使用to_csv()保存时,默认情况下会保存该值。

df.to_csv('./data/34/to_csv_out_float_default.csv')

可以使用to_csv()的参数float_format指定保存时浮点数float的格式。

更改显示设置时,格式由可调用对象(例如format())指定,但是在to_csv()中,指定了printf format%中使用的格式字符串。

例如,要将小数点后的位数设置为3位,请按照以下步骤操作。

print('%.3f' % 0.123456789)
# 0.123

print('%.3f' % 123456789)
# 123456789.000

df.to_csv('./data/34/to_csv_out_float_format_3f.csv', float_format='%.3f')

小数点后三位数的指数表示法如下。

print('%.3e' % 0.123456789)
# 1.235e-01

print('%.3e' % 123456789)
# 1.235e+08

df.to_csv('./data/34/to_csv_out_float_format_3e.csv', float_format='%.3e')

如果像上面的示例一样指定并保存了位数,则自然会丢失保存位数以下的信息。

转换为任何格式并保存

顾名思义,参数float_format仅对数据类型为浮点数float的列有效。如上例所示,整数int列保持不变。另外,不能为每列指定不同的格式。

如果要指定整数int列的格式,或者要为浮点数float的每一列指定不同的格式,请将原始pandas.DataFrame转换为任何格式的字符串,然后保存。

df['col1'] = df['col1'].map('{:.3f}'.format)
df['col2'] = df['col2'].map('{:.3e}'.format)
df['col3'] = df['col3'].map('{:#010x}'.format)

print(df)
#              col1       col2        col3
# 0           0.123  1.235e+08  0x075bcd15
# 1  1000000000.000  0.000e+00  0x00000000

print(df.dtypes)
# col1    object
# col2    object
# col3    object
# dtype: object

df.to_csv('./data/34/to_csv_out_float_format_str.csv')

请注意,如本例所示,如果将整数int保存为十六进制数,则pd.read_csv()会将其读取为字符串。如果要将其视为数字值,则需要在读取后将其转换。

df = pd.read_csv('./data/34/to_csv_out_float_format_str.csv', index_col=0)
print(df)
#            col1         col2        col3
# 0  1.230000e-01  123500000.0  0x075bcd15
# 1  1.000000e+09          0.0  0x00000000

print(df.dtypes)
# col1    float64
# col2    float64
# col3     object
# dtype: object

df['col3'] = df['col3'].map(lambda x: int(x, 16))
print(df)
#            col1         col2       col3
# 0  1.230000e-01  123500000.0  123456789
# 1  1.000000e+09          0.0          0

print(df.dtypes)
# col1    float64
# col2    float64
# col3      int64
# dtype: object
  • 16
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用pandas的to_csv()方法将DataFrame保存为csv文件。例如,使用以下代码将DataFrame保存为csv文件: ```python import pandas as pd df = pd.read_csv('./data/34/sample_pandas_normal.csv', index_col=0) df.to_csv('./data/34/to_csv_out.csv') ``` 这将把DataFrame保存为名为to_csv_out.csv文件。如果你想将数据追加到现有的csv文件中,可以使用mode='a'参数。例如: ```python df.to_csv('./data/34/to_csv_out.csv', mode='a', header=False) ``` 这将把数据追加到to_csv_out.csv文件中,而不会添加新的列名。 如果你想指定整数或浮点数列的格式,可以先将DataFrame中的列转换为字符串格式,然后再保存为csv文件。例如: ```python df\['col1'\] = df\['col1'\].map('{:.3f}'.format) df\['col2'\] = df\['col2'\].map('{:.3e}'.format) df\['col3'\] = df\['col3'\].map('{:#010x}'.format) df.to_csv('./data/34/to_csv_out_float_format_str.csv') ``` 这将把DataFrame中的col1列保留3位小数,col2列使用科学计数法表示,col3列以十六进制格式保存。 请注意,保存后的列类型将变为object。你可以使用df.dtypes来检查列的数据类型。 \[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *2* *3* [34_PandasCSV文件内容导出添加(to_csv)](https://blog.csdn.net/qq_18351157/article/details/113520345)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值