Python pandas.read_csv函数方法的使用

pandas.read_csv 是 Pandas 库中最常用的函数之一,用于读取 CSV 文件并将其转换为 DataFrame。它提供了多种参数来定制读取过程。本文主要介绍一下Pandas中pandas.read_csv方法的使用。

pandas.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)

将逗号分隔值(csv)文件读入DataFrame。还支持可选地将文件迭代或分解为块。可以在IO Tools的在线文档中找到其他帮助。

参数:

filepath_or_bufferstrpath对象或类文件

对象任何有效的字符串路径

都是可接字符串可以是URL。

有效的URL方案包括httpftps3file

对于文件URL,需要host。

本地文件可以是:file://localhost/path/to/table.csv

 如果要传入路径对象,pandas接受pathlib.Path

py._path.local.LocalPath

 通过类似文件的对象,我们使用read()方法引用对象,

例如文件处理程序(例如,通过内置的open函数)或StringIO

 sepstr,默认',' 分隔符使用。如果sep为None

则C引擎无法自动检测分隔符,但Python解析引擎可以,

这意味着后者将被使用并通过Python的内置嗅探器工具

csv.Sniffer自动检测分隔符。

此外,长度超过1个字符且与'\ s +'不同的分隔符

将被解释为正则表达式,

并且还将强制使用Python解析引擎。请注意,

正则表达式分隔符很容易忽略引用的数据。

正则表达式示例:'\ r \ t'。 

delimiterstr,默认 None 别名为sep

header:int,int列表,默认'infer

用作列名的行号和数据的开头。

默认行为是推断列名称:如果没有传递名称,

则行为与header = 0相同,

并且从文件的第一行推断列名称,如果显式传递列名,

则行为与header = None相同。显式传递

header = 0以便能够替换现有名称。

标题可以是整数列表,其指定列上的多索引的行位置,

例如, [0,1,3]。将跳过未指定的行

(例如,跳过此示例中的2)。

请注意,此参数忽略注释行和空行if skip_blank_lines = True,

因此header = 0表示第一行数据而不是文件的第一行。

names:array-like,可选 要使用的列名列表。

如果文件不包含标题行,

则应显式传递header = None

此列表中的重复项将导致发出UserWarning。

 index_colintsequencebool

可选 用作DataFrame的行标签的列。

如果给出序列,则使用MultiIndex

如果在每行末尾有一个带有分隔符的格式错误的文件,

您可能会考虑使用index_col = False

来强制pandas不使用第一列作为索引(行名称)。 

usecols:list-like或callable,optional 返回列的子集。

如果类似列表,则所有元素必须是位置(即文档列中的整数索引)

或与用户名称或从文档标题行推断的列名对应的字符串。

例如,有效的类似列表的usecols参数将是[0,1,2]

['foo','bar','baz']

元素顺序被忽略,因此usecols = [0,1][1,0]相同。

要从保留了元素顺序的数据中实例化DataFrame,

请使用pd.read_csv(data,usecols = ['foo','bar'])[['foo','bar']]

作为['foo','bar']中的列的顺序或

orpd.read_csv(data,usecols = ['foo','bar'])[['bar','foo']]

['bar','foo']顺序。

 如果是可调用的,则将根据列名评估可调用函数,

返回可调用函数求值为True的名称。

有效可调用参数的一个例子是

['AAA','BBB','DDD']中的lambda x:x.upper()

使用此参数可以大大加快解析时间并降低内存使用率。

squeezebool,默认为False 如果解析的数据只包含一列,

则返回一个Series

prefixstr,可选 在没有标题时添加到列号的前缀,

例如'X'代表X0,X1,...... 

mangle_dupe_colsbool,默认为True 

重复的列将被指定为'X','X.1',...'X.N',

而不是'X'...'X'。如果列中存在重复的名称,

则传入False将导致数据被覆盖。

dtype:列的名称或字典 -> type,optional 数据或列的数据类型。

例如, {'a':np.float64,'b':np.int32,'c':'Int64'}

strobject与合适的na_values

设置一起使用以保留和不解释dtype

如果指定了转换器,则它们将应用于dtype转换的INSTEAD

engine{'c','python'},可选 使用解析器引擎。

 C引擎速度更快,

而python引擎目前功能更加完善。

convertersdict,可选 用于转换某些列中的值的函数的字典。

键可以是整数或列标签。

true_valueslist,optional 要视为True的值。

false_valueslist,可选 要考虑为False的值。

skipinitialspacebool,默认为False分隔符后跳过空格。 

skiprows:list-like,int或callable,optional 要在文件开头跳过

(0索引)或要跳过的行数(int)的行号。 

如果是可调用的,则将根据行索引计算可调用函数,

如果应该跳过该行则返回True,否则返回False

有效可调参数的一个例子是[0,2]中的lambda x:x

skipfooterint,默认值为0 要跳过的文件底部的行数

(不支持engine ='c')。 

nrowsint,可选 要读取的文件行数。用于读取大文件。 

na_values:标量,str,list-like或dict,

可选 要识别为NA / NaN的其他字符串。

如果dict通过,则具体的每列NA值。默认情况下,

以下值被解释为NaN‘’, ‘#N/A’, ‘#N/A N/A’

‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’

‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’

‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’

keep_default_na:bool,默认为True

解析数据时是否包含默认NaN值。

根据是否传入na_values,行为如下: 

如果keep_default_naTrue

并且指定了na_values,则na_values

将附加到用于解析的默认NaN值。

 如果keep_default_naTrue,并且未指定na_values

则仅使用默认NaN值进行解析。

 如果keep_default_naFalse,并且指定了na_values

则仅使用指定的NaNna_values进行解析。

 如果keep_default_naFalse,并且未指定na_values

则不会将任何字符串解析为NaN

 请注意,如果将na_filter作为False传入,

则将忽略keep_default_nana_values参数。

 na_filterbool,默认为True检测缺失值标记

(空字符串和na_values的值)。

在没有任何NA的数据中,传递na_filter = False

可以提高读取大文件的性能。

 verbosebool,默认为False

指示放置在非数字列中的NA值的数量。 

skip_blank_linesbool,默认为True 如果为True

则跳过空行而不是解释为NaN值。、

parse_datesboolint或名称列表或列表或dict列表,

默认为False 

行为如下:

1)布尔值。如果为True  ->尝试解析索引。 

2)int或名称列表。例如,

如果[1,2,3]  ->尝试将每个列1,2,3解析

为一个单独的日期列。

3)列表清单。例如,

如果[[1,3]]  ->将第1列和第3列组合在一起

并解析为单个日期列。 

4)dict,例如,{'foo':[1,3]}  ->将第1,3列解析为日期

并调用结果'foo' 

如果列或索引不能表示为日期时间数组,例如由于不可解析的值

或时区的混合,

则列或索引将作为对象数据类型以不变的方式返回。

对于非标准日期时间解析,

请在pd.read_csv之后使用pd.to_datetime

要使用时区混合解析索引或列,

请将date_parser指定为部分应用的pandas.to_datetime()

其中utc = True

有关详细信息,请参阅使用混合时区解析CSV。 

注意:iso8601格式的日期存在快速路径。 

infer_datetime_formatbool,默认为False 

如果启用了Trueparse_dates

pandas将尝试推断列中日期时间字符串的格式,

如果可以推断,

请切换到更快的解析方法。在某些情况下,

这可以将解析速度提高5-10倍。

 keep_date_colbool,默认为False 

如果Trueparse_dates指定组合多个列,

则保留原始列。 

date_parserfunction,optional 用于将字符串列序列转换为日期

时间实例数组的函数。

默认使用dateutil.parser.parser进行转换。

 Pandas将尝试以三种不同的方式调用date_parser

如果发生异常则前进到下一个:

1)将一个或多个数组(由parse_dates定义)作为参数传递; 

2)将parse_datesin定义的列中的字符串值连接(逐行)到单个数组并传递; 

3)使用一个或多个字符串(对应于parse_dates定义的列)作为参数,

为每一行调用date_parser一次。 

dayfirstbool,默认为False DD / MM格式日期,国际和欧洲格式。

iteratorbool,默认为False 返回TextFileReader

对象以进行迭代或使用get_chunk()获取块。 

chunksizeint,可选 返回TextFileReader对象以进行迭代。

有关iterator和chunksize的更多信息,请参阅IO Tools文档。 

compression{‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}

、默认'infer' 用于磁盘上数据的即时解压缩。

如果'infer'filepath_or_buffer类似于路径,

则从以下扩展中检测压缩:

.gz’, ‘.bz2’, ‘.zip’, or.xz’(否则无解压缩)。

如果使用'zip',

则ZIP文件必须只包含一个要读入的数据文件。

设置为None表示不进行解压缩。 版本0.18.1中的新功能:

支持'zip'和'xz'压缩。

thousandsstr,可选 Thousands separator.。 

decimalstr,默认'.' 要识别为小数点的字符

(例如,对于欧洲数据使用‘,’ )。 

lineterminatorstr(长度为1),可选 将文件分成行的字符。

仅对C解析器有效。 

quotecharstr(长度为1),可选 用于表示引用项目的开头

和结尾的字符。

引用的项目可以包括分隔符,它将被忽略。

quotingintcsv.QUOTE_ *实例,默认为0 每个csv.QUOTE_ *

常量的控制字段引用行为。

使用QUOTE_MINIMAL(0)QUOTE_ALL(1)QUOTE_NONNUMERIC(2)

QUOTE_NONE(3)之一。 

doublequotebool,默认为True 如果指定了quotechar

且引用不是QUOTE_NONE

请指明是否将一个字段中的两个连续的quotechar

元素解释为单个quotecharelement。 

escapecharstr(长度为1),可选 

用于转义其他字符的单字符字符串。 

commentstr,可选 表示不应解析行的剩余部分。

如果在行的开头找到,

则该行将被完全忽略。此参数必须是单个字符。

与空行一样(只要skip_blank_lines = True),

参数标题将忽略完全注释的行,但不会被跳过。

例如,如果comment ='#',使用header = 0解析

#empty \na,b,c \n1,2,3

将导致'a,b,c'被视为标题。 

encoding:str,可选 编码以在读/写时使用UTF(例如'utf-8')。

 Python标准编码列表。 

dialectstrcsv.Dialect,可选 如果提供,

此参数将覆盖以下参数的值(默认值或不默认值):

delimiterdoublequoteescapechar

skipinitialspacequotecharquoting

如果需要覆盖值,则会发出ParserWarning。有关更多详细信息,

请参阅csv.Dialect文档。

tupleize_colsbool,默认为False 按原样在列上保留元组列表

(默认是在列上转换为MultiIndex)。

 自版本0.21.0后不推荐使用:此参数将被删除,

并始终转换为MultiIndex 

error_bad_linesbool,默认为True 具有太多字段的行

(例如,带有太多逗号的csv行)将默认导致引发异常,

并且不会返回任何DataFrame。如果为False

那么这些“坏行”将从返回的DataFrame中删除。 

warn_bad_linesbool,默认为True 

如果error_bad_lines为False

并且warn_bad_linesTrue,则将输出每个“bad line”的警告。 

delim_whitespacebool,默认为False 指定是否将空格

(例如'' '    ')用作sep。

相当于设置sep ='\ s +'。如果此选项设置为True

则不应为delimiter参数传递任何内容。 

版本0.18.1中的新增功能:支持Python解析器。 

low_memorybool,默认为True 以块的形式内部处理文件,

导致在解析时使用较少的内存,

但可能是混合类型推断。要确保没有混合类型,

请设置False

或使用dtype参数指定类型。请注意,

整个文件都被读入单个DataFrame中,

使用chunksizeiterator参数以块的形式返回数据。 

(仅对C解析器有效)。 

memory_mapbool,默认为False

如果为filepath_or_buffer提供了文件路径,

则将文件对象直接映射到内存并直接从那里访问数据。 

使用此选项可以提高性能,因为不再有任何I / O开销。 

float_precisionstr,可选 

指定C引擎应该将哪个转换器用于浮点值。 

普通转换器的选项为None,高精度转换器的选项为高,

往返转换器的选项为round_trip

返回:

DataFrameTextParser逗号分隔值(csv)文件

作为具有标记轴的二维数据结构返回。

例如,

1)基本读取

import pandas as pd

# 创建示例数据
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'age': [25, 30, 35, 40, 45],
    'city': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'],
    'date_of_birth': ['1995-05-01', '1990-07-14', '1985-08-23', '1980-12-11', '1975-04-05']
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 将 DataFrame 写入 CSV 文件
df.to_csv('data.csv', index=False)

# 读取 CSV 文件
df = pd.read_csv('data.csv')

# 显示 DataFrame
print(df)

2)指定列名

import pandas as pd

# 创建示例数据
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'age': [25, 30, 35, 40, 45],
    'city': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'],
    'date_of_birth': ['1995-05-01', '1990-07-14', '1985-08-23', '1980-12-11', '1975-04-05']
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 将 DataFrame 写入 CSV 文件
df.to_csv('data.csv', index=False)

# 读取 CSV 文件的特定列
df = pd.read_csv('data.csv', usecols=['name', 'city'])

# 显示 DataFrame
print(df)

3)将某列设置为索引

import pandas as pd

# 创建示例数据
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'age': [25, 30, 35, 40, 45],
    'city': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'],
    'date_of_birth': ['1995-05-01', '1990-07-14', '1985-08-23', '1980-12-11', '1975-04-05']
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 将 DataFrame 写入 CSV 文件
df.to_csv('data.csv', index=False)

# 读取 CSV 文件并将 name 列设置为索引
df = pd.read_csv('data.csv', index_col='name')

# 显示 DataFrame
print(df)

4)解析日期列

import pandas as pd

# 创建示例数据
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'age': [25, 30, 35, 40, 45],
    'city': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'],
    'date_of_birth': ['1995-05-01', '1990-07-14', '1985-08-23', '1980-12-11', '1975-04-05']
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 将 DataFrame 写入 CSV 文件
df.to_csv('data.csv', index=False)

# 读取 CSV 文件并解析日期列
df = pd.read_csv('data.csv', parse_dates=['date_of_birth'])

# 显示 DataFrame
print(df)
print(df.dtypes)

5)读取 CSV 文件并对字符串进行操作

import pandas as pd

# 创建示例数据并写入 CSV 文件
data = [
    'Alice,25,New York',
    'Bob,30,Los Angeles',
    'Charlie,35,Chicago',
    'David,40,Houston',
    'Eva,45,Phoenix'
]

# 将数据写入文件
with open('file.csv', 'w') as f:
    for line in data:
        f.write(line + '\n')

# 读取 CSV 文件
s = pd.read_csv('file.csv', sep=r'|', header=None).squeeze("columns")

# 分割字符串并展开为 DataFrame,计算逗号的数量
result = pd.concat([
    s.str.split(',', expand=True), 
    s.str.count(',').rename('_count_sep')
], axis=1)

# 打印结果
print(result)

相关文档Python Pandas csv文件中分隔符统计计数

推荐阅读
cjavapy编程之路首页