import pandas as pd
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 |
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文件比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则为最好。
谢谢大家的浏览,
希望我的努力能帮助到您,
共勉!