Pandas详解二十三之读取CSV、Excel文件

约定:
import pandas as pd

读取CSV文件

csv文件以.csv后缀结尾,默认用’,’作为分隔符,pandas提供了pd.read_csv()函数供我们读取csv文件:

pd.read_csv(filepath_or_buffer, sep=’,’, delimiter=None, header=’infer’, names=None, index_col=None, usecols=None, squeeze=False, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None)

常用参数解释:

filepath_or_buffer:文件名、文件具体或相对路径、文件对象

usecols:保留指定列

sep、delimiter:俩者均为文件分割符号,或为正则表达式

header:当文件中无列名需将其设为None

names:结合header=None,读取时传入列名

skiprows:忽略特定的行数

nrows:读取一定行数

na_values:一组将其值转换为NaN的特定值

sueeze:返回Series对象

1 保留指定列

pd.read_csv('test.csv',usecols=[0,2])
代码结果:
k1 values1
0 a 1
1 a 8
2 b 3
3 c 2

2 读取无列名的csv文件

若csv文件没有列名,则需要自行输入列名,否则Pandas会自动添加列名。

pd.read_csv('test2.csv',header=None,names=['k1','k2','value1','value2'])
代码结果:
k1 k2 value1 value2
0 a x 1 2
1 a y 8 3
2 b y 3 3
3 c z 2 9

3 读入时指定列为索引

像上述读入时,会自动添加索引:1,2,3,…,当文件中包含索引字段,则可以读入时指定特定列为索引。

  • 指定单索引
pd.read_csv('test.csv',index_col='k1')
代码结果:
k2 values1 values2
k1
a x 1 2
a y 8 3
b y 3 3
c z 2 9
  • 指定层次化索引
pd.read_csv('test.csv',index_col=['k1','k2'])
代码结果:
values1 values2
k1 k2
a x 1 2
y 8 3
b y 3 3
c z 2 9

4 忽略特定行数

需要注意的是,文件的第一行若为列名,则也有可能被忽略

  • 传入数值从特定行开始读取
pd.read_csv('test2.csv',header=None,names=['k1','k2','value1','value2'],skiprows=1)
代码结果:
k1 k2 value1 value2
0 a y 8 3
1 b y 3 3
2 c z 2 9
  • 传入列表忽略指定行
pd.read_csv('test.csv',skiprows=[1,3])
代码结果:
k1 k2 values1 values2
0 a y 8 3
1 c z 2 9

5 读取一定行数

pd.read_csv('test.csv',nrows=3)
代码结果:
k1 k2 values1 values2
0 a x 1 2
1 a y 8 3
2 b y 3 3

6 读入时将特定值设为NaN

文件中的空值因人而异,可能会是空,或者NaN,NA,IND等,pandas则有可能理解不了,这时则需要我们指定NaN标定值

pd.read_csv('test3.csv')
代码结果:
k1 k2 values1 values2
0 a x 1 NaN
1 a y NaN 3.0
2 b y 3 NaN
3 c z IND 9.0
  • 列表传入特定值
pd.read_csv('test3.csv',na_values=['IND'])
代码结果:
k1 k2 values1 values2
0 a x 1.0 NaN
1 a y NaN 3.0
2 b y 3.0 NaN
3 c z NaN 9.0
  • 使用字典为不同列指定NaN标记值
pd.read_csv('test3.csv',na_values={'value1':['IND'],'k1':['b','c']})
代码结果:
k1 k2 values1 values2
0 a x 1 NaN
1 a y NaN 3.0
2 NaN y 3 NaN
3 NaN z IND 9.0

7 返回Series对象

当处理后的结果只保留一列,但读取后的结果是为DataFrame对象,让squeeze=True则返回Series对象。

print(type(pd.read_csv('test.csv',usecols=['k1'])))
print(type(pd.read_csv('test.csv',usecols=['k1'],squeeze=True)))

代码结果:



读取Excel文件

Excel文件比csv特别的是excel可以有多个Sheet表格,当Excel文件只有单个Sheet表格时,用pd.read_excel()、pd.read_table()、甚至pd.read_csv()都可以,指定分隔符即可,当有多个Sheet表格时用pd.read_excel()更加灵活。

pd.read_excel(io, sheet_name=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, usecols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)

常用参数解释:

filepath_or_buffer:文件名、文件具体或相对路径、文件流(open()函数打开等)

usecols:保留指定列

sep、delimiter:俩者均为文件分割符号,或为正则表达式

header:当文件中无列名需将其设为None

names:结合header=None,读取时传入列名

skiprows:忽略特定的行数

nrows:读取一定行数

na_values:一组将其值转换为NaN的特定值

sueeze:返回Series对象

sheet_name:选择excel文件中的sheet表格,可为数值或string

这些参数的用法和pd.read_csv的参数用法一样,故不再详细介绍了。

1 读取第一个Sheet表格

sheet_name默认为0

pd.read_excel('test4.xlsx')
代码结果:
k1 k2 values1 values2
0 a x 1 2
1 a y 8 3
2 b y 3 3
3 c z 2 9

2 读取指定Sheet表格

sheet_name可指定Sheet表格,可以是Sheetname或者Sheet的编号(从0开始)

pd.read_excel('test4.xlsx',sheet_name=1,header=None,names=['k1','k2','value1','value2'])
#pd.read_excel('test4.xlsx',sheet_name='Sheet2',header=None,names=['k1','k2','value1','value2'])
代码结果:
k1 k2 value1 value2
0 a x 1 2
1 a y 8 3
2 b y 3 3
3 c z 2 9

总结

read_csv/read_excel/read_table 这三个读取文件函数将会是我们最常用的函数,read_csv和read_table差不多一样,不同的是前者sep=’,’,后者sep=’\t’。取csv用read_csv即可,读取txt/json等等则可用read_table,读取时指定sep即可。读取excel文件使用read_excel则为最好。

谢谢大家的浏览,
希望我的努力能帮助到您,
共勉!

你可能感兴趣的:(Python,数据挖掘,数据分析利器--Pandas)