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)

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

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

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

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

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

在参数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)

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

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

默认值为逗号”,”。

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

写入模式由参数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)

df['new_col'] = 'new data'

print(df)

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

以下面的pandas.DataFrame为例。

df = pd.DataFrame({'col1': [0.123456789, 1000000000.0],
                   'col2': [123456789.0, 0.0],
                   'col3': [123456789, 0]})
print(df)

print(df.dtypes)

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

print(df.iat[0, 0])

print(df.iat[1, 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)

print('%.3f' % 123456789)

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

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

print('%.3e' % 0.123456789)

print('%.3e' % 123456789)

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)

print(df.dtypes)

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)

print(df.dtypes)

df['col3'] = df['col3'].map(lambda x: int(x, 16))
print(df)

print(df.dtypes)

Original: https://blog.csdn.net/qq_18351157/article/details/113520345
Author: 饺子大人
Title: 34_Pandas对CSV文件内容的导出和添加(to_csv)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/752921/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球