一、文件读取
1、常见文件读取函数
函数 | 说明 |
---|---|
read_csv | 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号。 |
read_table | 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(‘\t’)。 |
read_excel | 从 Excel XLS 或 XLSX file 读取表格数据。 |
read_json | 读取 JSON(JavaScript Object Notation)字符串中的数据。 |
read_sql | (使用 SQLAlchemy)读取 SQL 查询结果为 pandas 的 DataFrame。 |
read_html | 读取 HTML 文档中的所有表格。 |
read_hdf | 读取 pandas 写的 HDF5 文件。 |
read_clipboard | 读取剪贴板中的数据,可以看做 read_table 的剪贴板版。在将网页转换为表格时很有用。 |
read_msgpack | 二进制格式编码的 pandas 数据。 |
read_pickle | 读取 Python pickle 格式中存储的任意对象。 |
read_sas | 读取存储于 SAS 系统自定义存储格式的 SAS 数据集。 |
read_fwf | 读取定宽列格式数据(也就是说,没有分隔符)。 |
read_stata | 读取 Stata 文件格式的数据集。 |
read_feather | 读取 Feather 二进制文件格式。 |
2、read_csv()
read_csv() 是 Pandas 库中的函数,用于从 CSV 文件中读取数据并创建一个 DataFrame。
CSV 格式比 Excel 能存储更多数据,CSV 读取性能比 Excel 会高很多。
参数:
-
filepath_or_buffer:这是必选参数,指定要读取的 CSV 文件的路径或 URL。可以是一个字符串,也可以是类似文件对象的可迭代对象(例如文件句柄)。
-
sep:指定 CSV 文件中的字段分隔符。默认值是逗号(,),但可以根据文件的实际分隔符来设置这个参数,例如制表符(\t)或分号(;)。
-
delimiter:sep 的别名,用于指定字段分隔符。
-
header:指定用作列名的行号。通常为整数,如果没有列名行,可以设置为 None。默认值为 0,表示第一行包含列名。
-
names:如果没有列名行,可以通过此参数提供列名的列表。与 header=None 一起使用。
-
index_col:用于指定哪一列作为 DataFrame 的索引列。可以是列名、列号或多列的组合。
-
usecols:指定要读取的列,可以是列名的列表或列号的列表。用于仅读取感兴趣的列,而不是整个文件。
-
skiprows:指定要跳过的行数,通常用于跳过文件中的标题或注释行。
-
nrows:指定要读取的行数,可以用于限制读取的数据量。
-
dtype:用于指定列的数据类型的字典,可以帮助优化内存使用和数据类型转换。
-
encoding:指定 CSV 文件的字符编码,常见的编码包括 “utf-8”、“ISO8859-1” 等。
-
parse_dates:指定要解析为日期时间的列,可以是列名或列号的列表。
-
date_parser:自定义日期时间解析函数,用于将字符串解析为日期时间对象。
-
na_values:指定要视为缺失值的标记值列表,例如 “NA”、“N/A”、“null” 等。
-
skipinitialspace:指定是否跳过字段值前的空白字符,默认为 False。
-
skip_blank_lines:指定是否跳过空白行,默认为 True。
-
quotechar:指定用于引用字段值的字符,通常为双引号或单引号。
-
compression:指定文件的压缩格式,例如 “gzip”、“bz2”、“xz” 等。
-
thousands:用于指定千位分隔符的字符。
常用参数案例:
1、文件路径 path 和编码方式 encoding
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
data = pd.read_csv(path,encoding='ANSI')
print(data)
查看编码方式 encoding
将文件选择记事本方式打开,另存为时有编码方式
2、设置表头 header
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
# header=0 表示物理的第一行设置为表头
data = pd.read_csv(path,header=0,encoding='ANSI')
print(data)
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
# header=1 表示物理的第二行设置为表头
data = pd.read_csv(path,header=1,encoding='ANSI')
print(data)
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
# header=None 表示源数据不设置表头
data = pd.read_csv(path,header=None,encoding='ANSI')
print(data)
3、设置索引列 index_col
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
data = pd.read_csv(path,index_col=1,encoding='ANSI')
print(data)
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
data = pd.read_csv(path,index_col='日期',encoding='ANSI')
print(data)
4、取部分列 usecols
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
data = pd.read_csv(path,usecols=[0,2,3],encoding='ANSI')
print(data)
5、元素的类型 dtype
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
data = pd.read_csv(path,encoding='ANSI')
# 查看类型
print(type(data)) # <class 'pandas.core.frame.DataFrame'>
# 查看元素类型
print(data.dtypes)
# 日期 object
# 股票0 float64
# 股票1 float64
# 股票2 float64
# 股票3 float64
# 股票4 float64
# dtype: object
# 查看详细信息摘要
print(data.info())
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 10000 entries, 0 to 9999
# Data columns (total 6 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 日期 10000 non-null object
# 1 股票0 10000 non-null float64
# 2 股票1 10000 non-null float64
# 3 股票2 10000 non-null float64
# 4 股票3 10000 non-null float64
# 5 股票4 10000 non-null float64
# dtypes: float64(5), object(1)
# memory usage: 468.9+ KB
# None
data2 = pd.read_csv(path,dtype={
'股票1':str},encoding='ANSI')
# 查看详细信息摘要
print(data2.info())
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 10000 entries, 0 to 9999
# Data columns (total 6 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 日期 10000 non-null object
# 1 股票0 10000 non-null float64
# 2 股票1 10000 non-null object
# 3 股票2 10000 non-null float64
# 4 股票3 10000 non-null float64
# 5 股票4 10000 non-null float64
# dtypes: float64(4), object(2)
# memory usage: 468.9+ KB
# None
6、设置某列为日期格式 parse_dates
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\exa5.csv'
data = pd.read_csv(path,parse_dates=['日期'],encoding='ANSI')
print(data.info())
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 10000 entries, 0 to 9999
# Data columns (total 6 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 日期 10000 non-null datetime64[ns]
# 1 股票0 10000 non-null float64
# 2 股票1 10000 non-null float64
# 3 股票2 10000 non-null float64
# 4 股票3 10000 non-null float64
# 5 股票4 10000 non-null float64
# dtypes: datetime64[ns](1), float64(5)
# memory usage: 468.9 KB
# None
7、把指定值变成空值 na_values
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\data1.csv'
data = pd.read_csv(path,na_values=[2.52],encoding='ANSI')
print(data)
3、read_table()
参数同 read_csv(), read_csv() 和 read_table() 之间的区别主要是函数名称,默认分隔符的历史设置。
在当前版本的 Pandas 中,它们几乎可以互相替代,只需根据实际数据文件的分隔符来设置 sep 参数即可。
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\data1.csv'
data = pd.read_table(path,encoding='ANSI')
print(data)
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\data1.csv'
# 可以读取 csv 文件
data = pd.read_table(path,encoding='ANSI',sep=',')
print(data)
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\data2.txt'
data = pd.read_table(path)
print(data)
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\data2.txt'
# 如果分裂空格个数不一致,可使用正则方式进行匹配
data = pd.read_table(path,sep='\s+')
print(data)
4、read_excel()
import pandas as pd # 导入 Pandas 库并使用别名 pd
path = r'F:\data\data3.xlsx'
# 读取表格指定工作表数据
# sheet_name='评论' 或 sheet_name=1
data = pd.read_excel(path,sheet_name='评论')
print(data)
5、read_json()
// F:\data\data4.json
[
{
"id": "A001",
"name": "百度",
"url": "www.baidu.com"
},
{
"id": "A002",
"name": "谷歌",
"url": "www.google.com"
},