CSV 文件的存取

2019/04/23 11:28
阅读数 35

CSV 文件介绍

  CSV(Comma-Separated Values),中文通常叫做逗号分割值。CSV文件由任意数目的记录(行)组成,每条记录由一些字段(列)组成,字段之间通常以逗号分割,当然也可以用制表符等其他字符分割,所以CSV又被称为字符分割值。

CSV 文件存储

  to_csv(self, path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.')

  参数
     ----------
  path_or_buf:str或文件句柄,默认为None。文件路径或对象,如果提供“None”,则返回结果为一个字符串。如果传递了一个文件对象,则应该打开`newline =''`,禁用通用换行符。  

import pandas as pd

# 输入一些数据(字典格式)
data = {
    '代号': ['A', 'B', 'C', 'D'],
    '体重': [65, 70, 64, 67],
    '身高': [178, 177, 180, 175]
}
# 将字典格式转化为DataFrame格式
df = pd.DataFrame(data)
# 打印DataFrame
print(df)
# 进行一些操作
df['身高'] = df['身高']+1
print(df)
# 存储为CSV文件
df.to_csv('data.csv')       # 相对地址
df.to_csv('E:/data.csv')    # 绝对地址格式1
df.to_csv(r'E:\data.csv')   # 绝对地址格式2
df.to_csv('E:\\data.csv')   # 绝对地址格式3
Code

  sep:str,默认为','。长度为1的字符串,输出文件的字段分隔符。设置为'\t',记事本打开更加清晰。 

df.to_csv('data.csv', sep='\t')    
Code

  na_rep:str,默认为''。缺少数据表示。当字典中数据为None时,可通过设置该参数显示为任意字符串。

import pandas as pd

# 输入一些数据(字典格式)
data = {
    '代号': ['A', 'B', 'C', 'D'],
    '体重': [65, None, 64, 67],
    '身高': [178, 177, 180, None]
}
# 将字典格式转化为DataFrame格式
df = pd.DataFrame(data)
# 打印DataFrame
print(df)
# 进行一些操作
df['身高'] = df['身高']+1
print(df)
# 存储为CSV文件
df.to_csv('data.csv', sep='\t', na_rep='null')
Code

  float_format:str,默认为None。浮点数的格式字符串,四舍五入。

import pandas as pd

# 输入一些数据(字典格式)
data = {
    '代号': ['A', 'B', 'C', 'D'],
    '体重': [65.238, 70.6, 64, 67.333],
    '身高': [178, 177.89, 180, 175.0]
}
# 将字典格式转化为DataFrame格式
df = pd.DataFrame(data)
# 打印DataFrame
print(df)
# 存储为CSV文件
df.to_csv('data.csv', sep='\t', float_format='%.2f')
Code

  columns:sequence,可选。要写的列。

import pandas as pd

# 输入一些数据(字典格式)
data = {
    '代号': ['A', 'B', 'C', 'D'],
    '体重': [65.238, 70.6, 64, 67.333],
    '身高': [178, 177.89, 180, 175.0]
}
# 将字典格式转化为DataFrame格式
df = pd.DataFrame(data)
# 打印DataFrame
print(df)
# 存储为CSV文件
df.to_csv('data.csv', sep='\t', columns=['代号', '身高'])
Code

  header:bool或str列表,默认为True。写出列名。如果给出了一个字符串列表,那就是假定是列名的别名。如果设置为False,则在追加的时候不在写入列名称。

import pandas as pd

# 输入一些数据(字典格式)
data = {
    '代号': ['A', 'B', 'C', 'D'],
    '体重': [65.238, 70.6, 64, 67.333],
    '身高': [178, 177.89, 180, 175.0]
}
# 将字典格式转化为DataFrame格式
df = pd.DataFrame(data)
# 打印DataFrame
print(df)
# 存储为CSV文件
df.to_csv('data.csv', sep='\t', header=['a', 'b', 'c'])     # 更改列名
df.to_csv('data.csv', sep='\t', header=False)     # 在追加的时候不写入列名称
Code

  index:bool,默认为True。写行名(索引)。如果设置为None或False,则在写入的时候不添加索引。

df.to_csv('data.csv', sep='\t', index=False)   
Code

  index_label:str或sequence,或False,默认为None。 

df.to_csv('data.csv', sep='\t', index_label='索引')
Code

  mode:str,默认为'w'。在追加时可设置为'a'。

df.to_csv('data.csv', sep='\t', index=False, header=False, mode='a')
Code

  encoding:str,可选。表示要在输出文件中使用的编码的字符串,默认为Python 2上的“ascii”和Python 3上的“utf-8”。当使'utf-16'编码时用Exel打开不会出现乱码问题。

df.to_csv('data.csv', sep='\t', encoding='utf-16')
Code

  compression:str,默认为'infer'。压缩模式具有以下可能值:{'infer', 'gzip','bz2','zip','xz',None}。如果'infer'和'path_or_buf'是路径,然后从以下检测压缩扩展名:'.gz','.bz2','.zip'或'.xz'。 (否则没有压缩)。

df.to_csv('data.csv.gz', sep='\t', compression='gzip')
Code

  quoting:来自csv模块的可选常量,默认为csv.QUOTE_MINIMAL。如果你设置了`float_format`,然后浮点数转换为字符串,从而转换为csv.QUOTE_NONNUMERIC,将它们视为非数字。

import pandas as pd
import csv

# 输入一些数据(字典格式)
data = {
    '代号': ['A', 'B', 'C', 'D'],
    '体重': [65.238, 70.6, 64, 67.333],
    '身高': [178, 177.89, 180, 175.0]
}
# 将字典格式转化为DataFrame格式
df = pd.DataFrame(data)
# 打印DataFrame
print(df)
# 存储为CSV文件
df.to_csv('data.csv', sep='\t', float_format='%.2f', quoting=csv.QUOTE_NONNUMERIC)
df.to_csv('data1.csv', sep='\t', quoting=csv.QUOTE_NONNUMERIC)
Code

  quotechar:str,默认'\"'。长度为1的字符串。用于引用字段的字符。

df.to_csv('data.csv', sep='\t', float_format='%.2f', quotechar='|')
Code

  line_terminator:string,可选。要在输出中使用的换行符或字符序列文件。默认为`os.linesep`,这取决于操作系统。调用此方法(对于Linux,'\ n',对于Windows,'\ r \ n',即)。

df.to_csv('data.csv', sep='\t', float_format='%.2f', line_terminator='\n')
Code

  chunksize:int或None。一次写一行。

df.to_csv('data.csv', sep='\t', header=False, mode='a', chunksize=1)
Code

  date_format:str,默认为None。日期时间对象的格式字符串。

import pandas as pd
import datetime

# 输入一些数据(字典格式)
data = {
    '代号': ['A', 'B', 'C', 'D'],
    '时间': [datetime.datetime.now(), datetime.datetime.now(), datetime.datetime.now(), datetime.datetime.now()],
    '身高': [178, 177.89, 180, 175.0]
}
# 将字典格式转化为DataFrame格式
df = pd.DataFrame(data)
# 打印DataFrame
print(df)
# 存储为CSV文件
df.to_csv('data.csv', sep='\t', float_format='%.2f', date_format='%Y-%m-%d')
Code

  doublequote:bool,默认为True。在字段内控制`quotechar`的引用。

df.to_csv('data.csv', doublequote=False, escapechar='|')
Code

  escapechar:str,默认为None。长度为1的字符串,用于转义`sep`和`quotechar`的字符。

df.to_csv('data.csv', doublequote=False, escapechar='|')
Code

  decimal:str,默认为'.'。 字符识别为小数点分隔符。

df.to_csv('data.csv', sep='\t', float_format='%.2f', decimal=':')
Code

CSV 文件读取

  read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)

  参数
     ----------
  filepath_or_buffer:str,path对象或类文件对象,任何有效的字符串路径都是可接受的。字符串可以是URL,有效URL方案包括http,ftp,s3和file。本地文件可以是:file://localhost/path/to/table.csv。

import pandas as pd

df = pd.read_csv('data.csv')
print(df)
Code

  sep:str,默认为','。读取时应该与写入时的seq保持一致。

df = pd.read_csv('data.csv', sep='\t')
Code

  delimiter:str,默认为"None",别名为sep。当delimiter参数和sep参数同时存在时,sep参数无效。

import pandas as pd

df = pd.read_csv('data.csv', delimiter='\t')
print(df)
df = pd.read_csv('data.csv', sep=',', delimiter='\t')
print(df)
Code

   header:int,int列表,默认为'infer',用作列名的行号和数据的开头。默认行为是推断列名:如果没有传递名称,行为与``header = 0``相同,列名从文件的第一行推断出来,如果显式传递列名,则行为与``header = None``相同。显式传递``header = 0``以便能够替换现有名称。标题可以是整数列表,其指定列上的多索引的行位置,例如,[0,1,3]。 将跳过未指定的干预行(例如,跳过此示例中的2)。 请注意,如果``skip_blank_lines = True``,则此参数忽略注释行和空行,因此``header = 0``表示第一行数据而不是文件的第一行。

import pandas as pd

df = pd.read_csv('data.csv', delimiter='\t')
print(df)
df = pd.read_csv('data.csv', delimiter='\t', header=0)
print(df)
df = pd.read_csv('data.csv', delimiter='\t', header=None)
print(df)
df = pd.read_csv('data.csv', delimiter='\t', header=[0, 3])
print(df)
Code

  names:array-like,可选。要使用的列名列表。 如果file不包含标题行,那么你应该显式传递``header = None``。 此列表中的重复项将导致发出“UserWarning”。

df = pd.read_csv('data.csv', delimiter='\t', names=['索引', '代号', '体重', '身高'])
Code

  index_col:int,sequence或bool,可选,用作行索引的列编号或者列名。如果给定一个序列则有多个行索引。如果在每行的末尾有一个带有分隔符的格式错误的文件,您可以考虑使用``index_col = False``来强制pandas不使用第一列作为索引(行名称)。

df = pd.read_csv('data.csv', delimiter='\t', index_col=['代号', '体重'])
Code

  usecols:list-like或callable,可选,返回列的子集。如果类似于列表,则所有元素必须是位置(即文档列中的整数索引)或对应于用户在“names”中提供或从文档标题行推断的列名的字符串。

df = pd.read_csv('data.csv', delimiter='\t', usecols=[0, 1])
Code

  squeeze:bool,默认为False。如果解析的数据只包含一列,则返回一个Series。

df = pd.read_csv('data.csv', delimiter='\t', usecols=[2], squeeze=True)
Code

  prefix:str,可选。Prefix在没有标题时添加到列号,例如 'X'代表X0,X1,......

df = pd.read_csv('data.csv', delimiter='\t', header=None, prefix='X')
Code

  mangle_dupe_cols:bool,默认为True。Duplicate列将指定为'X','X.1',...'X.N',而不是'X'...'X'。 如果列中存在重复的名称,则传入False将导致数据被覆盖。该参数值暂时不可以被修改。

df = pd.read_csv('data.csv', delimiter='\t', mangle_dupe_cols=True)
Code

  dtype:列的类型名或字典 ,可选,用来设置每列数据的数据类型。

df = pd.read_csv('data.csv', delimiter='\t', dtype={'索引': float, '身高': float})
Code

   engine : {'c', 'python'},可选。使用的分析引擎,C引擎速度更快,而python引擎目前功能更加完善。

df = pd.read_csv('data.csv', delimiter='\t', engine='c')
Code

  converter:dict,可选。Dict用于转换某些列中的值的函数,键可以是整数或列标签。

df = pd.read_csv('data.csv', delimiter='\t', converters={'索引': float})
Code

  true_values:list,可选。Values考虑为True。

df = pd.read_csv('data.csv', delimiter='\t', true_values=['A'])
Code 

  false_values:list,可选。Values考虑为False。

df = pd.read_csv('data.csv', delimiter='\t', false_values=['B'])
Code

  skipinitialspace:bool,默认为False。分隔符后跳过空格

df = pd.read_csv('data.csv')
print(df)
df = pd.read_csv('data.csv', skipinitialspace=True)
print(df)
Code

 

 

 


    

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部