如果要将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/
转载文章受原作者版权保护。转载请注明原作者出处!