pd.read_csv( )
1 2
| import pandas as pd import numpy as np
|
pd.read_csv( filepath_or_buffer: 'FilePath | ReadCsvBuffer[bytes] | ReadCsvBuffer[str]', sep=<no_default>, delimiter=None, header='infer', names=<no_default>, index_col=None, usecols=None, squeeze=None, prefix=<no_default>, mangle_dupe_cols=True, dtype: 'DtypeArg | None' = None, engine: 'CSVEngine | None' = 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=None, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression: 'CompressionOptions' = 'infer', thousands=None, decimal: 'str' = '.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, encoding_errors: 'str | None' = 'strict' , dialect=None, error_bad_lines=None, warn_bad_lines=None, on_bad_lines=None, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None, storage_options: 'StorageOptions' = None, )
读取CSV
filepath_or_buffer
- 指定文件路径
- 本地文件
D:\OneDrive\文档\Office\shid.csv
- url(http\ftp)
1
| pd.read_csv('dlt.csv').head()
|
Output:
|
Unnamed: 0 |
期号 |
R1 |
R2 |
R3 |
R4 |
R5 |
B1 |
B2 |
日期 |
0 |
0 |
21088 |
2 |
14 |
31 |
34 |
35 |
1 |
7 |
2021-08-02 |
1 |
1 |
21087 |
10 |
14 |
15 |
25 |
28 |
3 |
10 |
2021-07-31 |
2 |
2 |
21086 |
2 |
3 |
7 |
16 |
17 |
6 |
10 |
2021-07-28 |
3 |
3 |
21085 |
1 |
12 |
15 |
26 |
35 |
10 |
11 |
2021-07-26 |
4 |
4 |
21084 |
2 |
10 |
14 |
30 |
33 |
6 |
9 |
2021-07-24 |
sep : str,指定分隔符
- default ‘,’
- 如果不指定参数,则会尝试使用逗号分隔。
- 分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’\r\t’
1
| pd.read_csv('dlt.csv',sep='\t').head()
|
Output:
|
,期号,R1,R2,R3,R4,R5,B1,B2,日期 |
0 |
0,21088,02,14,31,34,35,01,07,2021-08-02 |
1 |
1,21087,10,14,15,25,28,03,10,2021-07-31 |
2 |
2,21086,02,03,07,16,17,06,10,2021-07-28 |
3 |
3,21085,01,12,15,26,35,10,11,2021-07-26 |
4 |
4,21084,02,10,14,30,33,06,09,2021-07-24 |
index_col = None/0/False
- 用第几列作为行索引
- None :表示没有,自动添加数字序列作为索引
- 0:指定第0列作为索引列
[0,1]: 也可以指定多列索引
1
| pd.read_csv('dlt.csv', index_col=[0, 1]).head()
|
Output:
|
|
R1 |
R2 |
R3 |
R4 |
R5 |
B1 |
B2 |
日期 |
|
期号 |
|
|
|
|
|
|
|
|
0 |
21088 |
2 |
14 |
31 |
34 |
35 |
1 |
7 |
2021-08-02 |
1 |
21087 |
10 |
14 |
15 |
25 |
28 |
3 |
10 |
2021-07-31 |
2 |
21086 |
2 |
3 |
7 |
16 |
17 |
6 |
10 |
2021-07-28 |
3 |
21085 |
1 |
12 |
15 |
26 |
35 |
10 |
11 |
2021-07-26 |
4 |
21084 |
2 |
10 |
14 |
30 |
33 |
6 |
9 |
2021-07-24 |
- 指定数据框的列标签
- default ‘infer’
- None 会表明表中没有表头,自动添加数字序列的表头
- 0 :表示使用表格中的首行作为标签
[0,1,2]
也可以是多行作为标题
- 指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。
1
| pd.read_csv('dlt.csv',index_col=0,header=None).head()
|
Output:
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
|
|
|
|
|
|
|
|
|
NaN |
期号 |
R1 |
R2 |
R3 |
R4 |
R5 |
B1 |
B2 |
日期 |
0.0 |
21088 |
02 |
14 |
31 |
34 |
35 |
01 |
07 |
2021-08-02 |
1.0 |
21087 |
10 |
14 |
15 |
25 |
28 |
03 |
10 |
2021-07-31 |
2.0 |
21086 |
02 |
03 |
07 |
16 |
17 |
06 |
10 |
2021-07-28 |
3.0 |
21085 |
01 |
12 |
15 |
26 |
35 |
10 |
11 |
2021-07-26 |
1
| pd.read_csv('dlt.csv', index_col=0, header=[0, 1, 2]).head()
|
Output:
|
期号 |
R1 |
R2 |
R3 |
R4 |
R5 |
B1 |
B2 |
日期 |
0 |
21088 |
02 |
14 |
31 |
34 |
35 |
01 |
07 |
2021-08-02 |
1 |
21087 |
10 |
14 |
15 |
25 |
28 |
03 |
10 |
2021-07-31 |
2 |
21086 |
2 |
3 |
7 |
16 |
17 |
6 |
10 |
2021-07-28 |
3 |
21085 |
1 |
12 |
15 |
26 |
35 |
10 |
11 |
2021-07-26 |
4 |
21084 |
2 |
10 |
14 |
30 |
33 |
6 |
9 |
2021-07-24 |
5 |
21083 |
7 |
9 |
11 |
26 |
35 |
1 |
8 |
2021-07-21 |
6 |
21082 |
1 |
14 |
22 |
29 |
33 |
3 |
10 |
2021-07-19 |
names= […] 更改列名称
- 更改列名称
names=<no_default>
- 数量要相同,
- 列名称是一个序列
1 2 3 4 5 6
| pd.read_csv( 'dlt.csv', index_col=0, header=0, names=['期号', 'Red1', 'Red2', 'Red3', 'Red4', 'Red5', 'Blue1', 'Blue2', '日期']).head()
|
Output:
|
期号 |
Red1 |
Red2 |
Red3 |
Red4 |
Red5 |
Blue1 |
Blue2 |
日期 |
0 |
21088 |
2 |
14 |
31 |
34 |
35 |
1 |
7 |
2021-08-02 |
1 |
21087 |
10 |
14 |
15 |
25 |
28 |
3 |
10 |
2021-07-31 |
2 |
21086 |
2 |
3 |
7 |
16 |
17 |
6 |
10 |
2021-07-28 |
3 |
21085 |
1 |
12 |
15 |
26 |
35 |
10 |
11 |
2021-07-26 |
4 |
21084 |
2 |
10 |
14 |
30 |
33 |
6 |
9 |
2021-07-24 |
usecols=None, 选取列
- 要读入哪些列的数据,用列表表示
usecols=[0,1,...]
- 当使用
usecols=[...]
参数时,要将 index_col =None
- 也可以使用函数定义要读入哪些列,传入函数的变量是列标签
1
| pd.read_csv('dlt.csv', index_col=None, header='infer', usecols=[1, 3, 5, 7, 9]).head()
|
Output:
|
期号 |
R2 |
R4 |
B1 |
日期 |
0 |
21088 |
14 |
34 |
1 |
2021-08-02 |
1 |
21087 |
14 |
25 |
3 |
2021-07-31 |
2 |
21086 |
3 |
16 |
6 |
2021-07-28 |
3 |
21085 |
12 |
26 |
10 |
2021-07-26 |
4 |
21084 |
10 |
30 |
6 |
2021-07-24 |
1 2
| import re pd.read_csv('dlt.csv', index_col=None, header=0, usecols=lambda x: re.search("^B",x)).head()
|
Output:
|
B1 |
B2 |
0 |
1 |
7 |
1 |
3 |
10 |
2 |
6 |
10 |
3 |
10 |
11 |
4 |
6 |
9 |
dtype : 指定列的数据格式
- default None
- 用字典的格式指定多列
- 每列数据的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32}
dtype = {
col1’: str ,’col2’: int32 ,’col3’ :
1 2 3 4 5 6 7 8 9 10 11
| df1 = pd.read_csv('dlt.csv', index_col=0, header=[0])
df2 = pd.read_csv('dlt.csv', index_col=0, header=0, dtype={ '期号': str, 'R2': int, }) print('之前各列的数据格式:\n', df1.dtypes) print('指定了dtype参数后各列的数据格式:\n', df2.dtypes)
|
Output:
<img src="./1.webp">
parse_dates 解析日期列
parse_dates=['col_date']
- 指定某些列为时间类型,这个参数一般搭配date_parser使用。
- date_parser:是用来配合parse_dates参数的,
- 因为有的列虽然是日期,但没办法直接转化,需要我们指定一个解析格式:
1 2 3 4 5 6 7 8 9 10 11
| df2 = pd.read_csv('dlt.csv', index_col=0, header=0, dtype={ '期号': str, 'R2': np.int32, }, parse_dates=['日期'])
print('之前各列的数据格式:\n', df1.dtypes) print('指定了dtype参数后各列的数据格式:\n', df2.dtypes)
|
Output:
<img src="./2.webp">
converters : dict
- default None 列转换函数的字典。key可以是列名或者列的序号。
- 可以转换数据格式,也可以使用函数运算
1 2 3 4 5 6 7 8 9 10 11 12
| pd.read_csv('dlt.csv', index_col=0, header=0, dtype={ '期号': str, 'Red2': int, }, parse_dates=['日期'], converters={ 'R5': float, 'R1': lambda x: str(x).rjust(3, "0") }).head()
|
Output:
|
期号 |
R1 |
R2 |
R3 |
R4 |
R5 |
B1 |
B2 |
日期 |
0 |
21088 |
002 |
14 |
31 |
34 |
35.0 |
1 |
7 |
2021-08-02 |
1 |
21087 |
010 |
14 |
15 |
25 |
28.0 |
3 |
10 |
2021-07-31 |
2 |
21086 |
002 |
3 |
7 |
16 |
17.0 |
6 |
10 |
2021-07-28 |
3 |
21085 |
001 |
12 |
15 |
26 |
35.0 |
10 |
11 |
2021-07-26 |
4 |
21084 |
002 |
10 |
14 |
30 |
33.0 |
6 |
9 |
2021-07-24 |
nrows : int
- default None
- 需要读取的行数(从文件头开始算起)。
1 2 3 4 5 6 7 8 9 10 11 12 13
| pd.read_csv('dlt.csv', index_col=0, header=0, dtype={ '期号': str, 'Red2': int, }, parse_dates=['日期'], converters={ 'R5': float, 'R1': lambda x: str(x).rjust(3, "0") }, nrows=8)
|
Output:
|
期号 |
R1 |
R2 |
R3 |
R4 |
R5 |
B1 |
B2 |
日期 |
0 |
21088 |
002 |
14 |
31 |
34 |
35.0 |
1 |
7 |
2021-08-02 |
1 |
21087 |
010 |
14 |
15 |
25 |
28.0 |
3 |
10 |
2021-07-31 |
2 |
21086 |
002 |
3 |
7 |
16 |
17.0 |
6 |
10 |
2021-07-28 |
3 |
21085 |
001 |
12 |
15 |
26 |
35.0 |
10 |
11 |
2021-07-26 |
4 |
21084 |
002 |
10 |
14 |
30 |
33.0 |
6 |
9 |
2021-07-24 |
5 |
21083 |
007 |
9 |
11 |
26 |
35.0 |
1 |
8 |
2021-07-21 |
6 |
21082 |
001 |
14 |
22 |
29 |
33.0 |
3 |
10 |
2021-07-19 |
7 |
21081 |
005 |
13 |
24 |
29 |
35.0 |
7 |
8 |
2021-07-17 |
skip_blank_lines : 对空行的处理
- boolean, default True
- 如果为True,则跳过空行;否则记为NaN。
skiprows : list-like or integer
- default None 需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。
- 注意不要将表头给过滤掉
- skipfooter : int, default 0 从文件尾部开始忽略。 (c引擎不支持)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| pd.read_csv('dlt.csv', index_col=0, header=0, dtype={ '期号': str, 'Red2': int, }, parse_dates=['日期'], converters={ 'R5': float, 'R1': lambda x: str(x).rjust(3, "0") }, nrows=8, skiprows=lambda x: x > 0 and x % 2 == 0)
|
Output:
|
期号 |
R1 |
R2 |
R3 |
R4 |
R5 |
B1 |
B2 |
日期 |
0 |
21088 |
002 |
14 |
31 |
34 |
35.0 |
1 |
7 |
2021-08-02 |
2 |
21086 |
002 |
3 |
7 |
16 |
17.0 |
6 |
10 |
2021-07-28 |
4 |
21084 |
002 |
10 |
14 |
30 |
33.0 |
6 |
9 |
2021-07-24 |
6 |
21082 |
001 |
14 |
22 |
29 |
33.0 |
3 |
10 |
2021-07-19 |
8 |
21080 |
015 |
16 |
20 |
29 |
30.0 |
6 |
10 |
2021-07-14 |
10 |
21078 |
002 |
8 |
17 |
19 |
25.0 |
1 |
5 |
2021-07-10 |
12 |
21076 |
006 |
13 |
22 |
25 |
26.0 |
2 |
4 |
2021-07-05 |
14 |
21074 |
011 |
14 |
18 |
20 |
25.0 |
3 |
7 |
2021-06-30 |
engine : 指定解析数据的引擎
- {‘c’, ‘python’} 两种选择
- 使用的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。
encoding : 指定字符集类型
gbk
,ansi
,utf-8-sig
,
- 通常指定为’utf-8’.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| pd.read_csv('dlt.csv', index_col=0, header=0, dtype={ '期号': str, 'R2': float, }, parse_dates=['日期'], converters={ 'R5': float, 'R1': lambda x: str(x).rjust(2, "0") }, nrows=8, skiprows=lambda x: x > 0 and x % 2 == 0, encoding='utf-8-sig', engine='c')
|
Output:
|
期号 |
R1 |
R2 |
R3 |
R4 |
R5 |
B1 |
B2 |
日期 |
0 |
21088 |
02 |
14.0 |
31 |
34 |
35.0 |
1 |
7 |
2021-08-02 |
2 |
21086 |
02 |
3.0 |
7 |
16 |
17.0 |
6 |
10 |
2021-07-28 |
4 |
21084 |
02 |
10.0 |
14 |
30 |
33.0 |
6 |
9 |
2021-07-24 |
6 |
21082 |
01 |
14.0 |
22 |
29 |
33.0 |
3 |
10 |
2021-07-19 |
8 |
21080 |
15 |
16.0 |
20 |
29 |
30.0 |
6 |
10 |
2021-07-14 |
10 |
21078 |
02 |
8.0 |
17 |
19 |
25.0 |
1 |
5 |
2021-07-10 |
12 |
21076 |
06 |
13.0 |
22 |
25 |
26.0 |
2 |
4 |
2021-07-05 |
14 |
21074 |
11 |
14.0 |
18 |
20 |
25.0 |
3 |
7 |
2021-06-30 |