Pandas读存CSV文件
文本记录的是如何使用Pandas来读取和保存CSV文件。
详细的参数请参考官网:https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
官方参数
1 | read_csv(filepath_or_buffer, |
下面是对部分参数的解释:
- filepath_or_buffer:文件路径或者在线缓存的数据
- sep:指定的分隔符,默认是
,
- delimiter:作用和sep是类似的
- header:文件头,默认是数据第一行;如果指定为None,则用自然数0,1,2,3等表示
- names:指定文件列名
- index_col:指定将哪列作为行索引
- usecols:指定读取的列,可以是数字或列名
- squeeze:如果将squeeze设置为True,文件中只包含一列,则返回一个Series型的数据;如果有多列,则返回DataFrame型数据
- prefix:如果原始数据没有列名,通过该参数加上前缀,此时headers参数为None
- dtype:指定数据类型
- engine:解析引擎,一般是c或者python
- converters:针对列进行处理。指定列名和处理的函数,最终通过字典的形式传入
- nrows:指定读取的行
- skip_blank_lines:是否跳过空白行,默认是True
在一般情况下,会将读取到的数据返回成一个Pandas的DataFrame形式的数据。
导入库
1 | import pandas as pd |
参数1:filepath_or_buffer
本地数据
- 读取本地csv文件
- 路径可以是相对路径,也可以是绝对路径
In [3]:
1 | # 绝对路径:当前路径 |
在线数据
读取某个URL地址下的在线公开数据集:
1 | url = "https://raw.githubusercontent.com/hunkim/DeepLearningZeroToAll/master/data-03-diabetes.csv" |
参数2:sep
指定分割的符号。CSV的文件默认是英文的逗号来分割的:,
。另外常见的还有制表符(\t)、空格等,我们可以根据数据的实际情况来进行传值。
sep的默认取值也是英文的逗号
In [9]:
1 | df = pd.read_csv("Pandas_for_CSV.csv", sep=",") # 默认 |
其他分隔符:
1 | # 数据分隔符默认是逗号,可以指定为其他符号 |
还可以同时使用多个符号,传入的是正则表达式。
下面的例子中表示的是使用|
或者,
来进行分割;当使用的是正则表达式,engine参数一定是python
In [11]:
1 | # pd.read_csv(data,sep=r'/|,', engine='python') # 使用正则表达式 |
参数3:delimiter
备选的分隔符,作用和sep是类似的;如果指定了delimiter参数,则sep参数会失效
In [12]:
1 | df = pd.read_csv("Pandas_for_CSV.csv", delimiter=",") |
参数4:header
指定读取的文件头;默认是第一行当做表头,如果是None则没有表头,使用自然数当做表头。
支持单个整数或者整数组成的列表:
默认情况下将数据的第一行当做文件的头:
In [13]:
1 |
|
指定为None之后,第一行不再是表头,而是使用自然数做表头:
In [14]:
1 |
|
Out[14]:
1 | # 读取本地文件 |
下面的例子是将多行当做表头,由数字组成的列表:
In [16]:
1 | df = pd.read_csv("Pandas_for_CSV.csv",header=[0,2]) |
Out[16]:
参数5:names
用来指定文件的列名,也是一个列表对象。
在线数据的读取也可以指定names参数:
参数6:index_col
指定行索引列
指定多层索引:
1 | df = pd.read_csv("Pandas_for_CSV.csv",index_col=[0,1]) |
参数7:usecols
指定查看的列属性信息,可以是索引号或者直接使用列名:
参数8:squeeze
如果将squeeze设置为True,文件中只包含一列,则返回一个Series型的数据;如果包含有多列,则还是返回DataFrame型数据
In [27]:
1 | # 默认返回的是DataFrame |
Out[27]:
In [28]:
1 | # 加上squeeze参数,返回的是Series型数据 |
Out[28]:
1 | 0 S001 |
In [29]:
1 | df = pd.read_csv("Pandas_for_CSV.csv",usecols=[0,1],squeeze=True) |
Out[29]:
参数9:prefix
如果原始数据没有列名,通过prefix参数给表头加上一个前缀;此时header参数一定是None
In [30]:
1 | df = pd.read_csv(url, prefix="n", header=None) |
参数10:mangle_dupe_cols
针对列名中有重复名称的处理,可以将重复的列名自动解析为col.1,col.2,col.3等
In [31]:
1 | df = pd.read_csv("Pandas_for_CSV_1.csv",mangle_dupe_cols=False) |
参数11:dtype
指定读取字段的数据类型,通常是以字典的形式出现
In [33]:
1 | df = pd.read_csv("Pandas_for_CSV.csv") |
Out[33]:
1 | id object |
In [34]:
1 | df = pd.read_csv("Pandas_for_CSV.csv", dtype={"age":"float32"}) |
Out[34]:
1 | id object |
参数12:engine
读取数据时的解析引擎,一般是C、PyArrow、或者Python;C和PyArrow的速度是相对快的,但是Python的功能最强。
补充知识点:
Apache arrow是高性能的,用于内存计算的,列式数据存储格式。PyArrow是apache arrow的python库,PyArrow与NumPy、pandas和内置的Python对象有很好的集成。它们是基于Arrow的C++实现。
In [35]:
1 | # pd.read_csv("Pandas_for_CSV.csv", engine="c") |
参数13:converters
针对列进行处理。指定列名和处理的函数,最终通过字典的形式传入
In [36]:
1 | # 默认 |
实施改变1:名称name的首字母变成大写
In [37]:
1 | # Python中的title实现 |
实施改变2:同时传入列名和对应的函数
In [38]:
1 | # 自定义改变姓名内容的函数 |
In [39]:
1 | df = pd.read_csv( |
参数14:true_values、false_values
将指定内容的文本转成True或者False
In [40]:
1 | df = pd.read_csv("Pandas_for_CSV.csv", |
Out[40]:
参数15:skiprows
跳过指定的行,可以是数字,列表,也可以是函数表达式
In [41]:
1 | # pd.read_csv("Pandas_for_CSV.csv", skiprows=[0]) |
参数16:skip_blank_lines
是否跳过空白行。如果设置成True,则跳过空白行,否则不跳过,显示为NaN
参数17:skipfooter
最后的N行数据不进行显示
In [42]:
1 | # pd.read_csv("Pandas_for_CSV.csv", skipfooter=1) 最后1行不显示 |
参数18:skipinitialspace
忽略分隔符后面的空白符
参数19:nrows
用来表示读取指定行数的数据
In [43]:
1 | pd.read_csv("Pandas_for_CSV.csv",nrows=4) # 读取4行数据 |
参数20:parse_dates
自动解析数据的时间信息
In [44]:
1 | df = pd.read_csv("Pandas_for_CSV.csv") |
Out[44]:
1 | id object |
In [45]:
1 | df = pd.read_csv("Pandas_for_CSV.csv", |
Out[45]:
1 | id object |
In [46]:
1 | df = pd.read_csv("Pandas_for_CSV.csv", |
Out[46]:
1 | id object |
In [47]:
1 | # 将6-year和7-month合并成一个字段date |
Out[47]:
1 | date datetime64[ns] |
参数21:keep_date_col
在上面的例子中生成了新的字段date,但是原来的year和mont删除了。可以通过keep_date_col来设置保留或者取出
In [48]:
1 | # 将6-year和7-month合并成一个字段date |
Out[48]:
1 | date datetime64[ns] |
保存CSV文件
这个保存到CSV的功能是将DataFrame保存到Excel的功能是类似的:
1 | df.to_csv("new_df.csv") # 会带上index索引号 |