read_csv方法从文件、URL、文件型对象加载带分隔符的数据,默认分隔符是逗号。
read_table方法从文件、URL、文件型对象加载带分隔符的数据,默认分隔符为制表符。
read_fwf方法读取固定宽度格式的数据
类型推断是上面这些函数最重要的功能之一,不需要指定列的类型。
df = pd.read_csv('ex1.csv')
我们也可以使用read_table,不过需要指定分隔符
pd.read_table('ex1.csv', sep=',')
并不是所有的数据都是有标题的
pd.read_csv('ex2.csv', header=None)
pd.read_csv('ex2.csv', names=['a', 'b', 'c', 'd', 'message'])
假设希望将message列作为DataFrame的索引
names = ['a', 'b', 'c', 'd', 'message']
pd.read_csv('ex2.csv', names=names, index_col='message')
使用多个列做成层次化索引
parsed = pd.read_csv('csv_mindex.csv', index_col=['key1', 'key2'])
有些表格不能使用固定的分隔符分隔,需要使用正则表达式作为read_table的分隔符
result = pd.read_table('ex3.txt', sep='\s+')
A B C
aaa -0.264438 -1.026059 -0.619500
bbb 0.927272 0.302904 -0.032399
ccc -0.264273 -0.386314 -0.217601
ddd -0.871858 -0.348382 1.100491
上面文件由于各个字段是由数量补丁的空白符分隔,因此可以使用正则表达式\s+
表示
由于列名比数据航的数量少,因此read_table推断第一列是DataFrame的索引。
跳过某些行
原始数据
!cat ex4.csv
# hey!
a,b,c,d,message
# just wanted to make things more difficult for you
# who reads CSV files with computers, anyway?
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
跳过注释行
pd.read_csv('ex4.csv', skiprows=[0, 2, 3])
缺失值处理
默认情况,pandas使用一组经常出现的标记值进行识别,如NA、-1或NULL
!cat ex5.csv
something,a,b,c,d,message
one,1,2,3,4,NA
two,5,6,,8,world
three,9,10,11,12,foo
读取数据
result = pd.read_csv('ex5.csv')
na_values可以接受一组用于表示缺失值的字符串
result = pd.read_csv('ex5.csv', na_values=['NULL'])
result
可以用字典为各列指定不同的NA标记值
sentinels = {'message': ['foo', 'NA'], 'something': ['two']}
pd.read_csv('ex5.csv', na_values=sentinels)