pandas提供了一些用于将表格型数据读取为DataFrame对象的函数
其中read_csv和read_table用的比较多
函数 | 说明 |
---|---|
read_csv | 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号 |
read_table | 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(“\t”) |
read_fwf | 读取定宽列格式数据(也就是说,没有分割符) |
read_clipboard | 肚脐剪贴板中的数据,可以看做read_table的剪贴板。在将网页转换为表格是很有用 |
这些函数的选项可以划分为以下几个大类:
csv文件是默认以,为分割符.可以通过命令行cat来读取文件内容.
In [4]: cat Data/python/1.csv
a,b,c,d,message
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
同样的我们也可以用pandas的函数进行读取.
In [6]: result=pd.read_csv('Data/python/1.csv')
In [7]: result
Out[7]:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 worlld
2 9 10 11 12 foo
我们也可以用read_table,只不过需要指定分隔符而已
In [8]: result=pd.read_table('Data/python/1.csv',sep=',')
In [9]: result
Out[9]:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 worlld
2 9 10 11 12 foo
当没有标题行时,读入该数据文件有两个方法:(你可以让pandas为其分配默认的列名,亦可以自己定义列名)
In [10]: result=pd.read_csv('Data/python/1.csv',header=None)
In [11]: result
Out[11]:
X.1 X.2 X.3 X.4 X.5
0 1 2 3 4 hello
1 5 6 7 8 worlld
2 9 10 11 12 foo
In [12]: result=pd.read_csv('Data/python/1.csv',names=['a','b','c','d','message'])
In [13]: result
Out[13]:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 worlld
2 9 10 11 12 foo
当然,你也可以根据message来做索引读取文件,这里就不过多介绍了
参数说明
path | 表示文件系统位置、URL、文件型对象的字符串 |
sep/delimiter | 用于对行中各字段进行拆分的字符序列或正则表达式 |
header | 用作列名的行号。如果没有header行就应该设置为None |
index_col | 用作行索引的列编号或列名,可以是单个名称/数字或由多个名称/数字组成的列表 |
names | 用于结果的列名列表,结合header = None |
skiprows | 需要忽略的行数(从文件开始处算起),或需要跳过的行号;列表 |
na_values | 一组用于替换NA的值 |
comment | 用于将注释信息从行尾拆分出去的字符 (一个或多个) |
parse_dates | 尝试将数据解析为日期 |
nrows | 需要读取的行数(从文件开始处算起) |
skip_footer | 需要忽略的行数 |
converters | 由列号/列名跟函数之间的映射关系组成的字典。例如:{‘foo’:f}会对foo列的所有值应用函数f |
逐块读取文本文件
用于你只想读取文件的部分或逐块对文件进行迭代
In [ ]: result=pd.read_csv('Data/python/1.csv')
In [ ]: result
Out[ ]:
Int64Index: 10000 entries, 0 to 9999
Data columns:
one 10000 non-null values
two 10000 non-null values
three 10000 non-null values
four 10000 non-null values
key 10000 non-null values
dtype : float64(4), object(1)
#如果只想读取几行,通过nrows进行指定即可
将数据写出到文本格式
In[]: data = pd.read_csv('ex5.csv')
In[]: data.to_csv('out.csv') # 将data中的数据写出到当前目录中的out.csv中
In[]: data.to_csv(sys.stdout, sep='|') # 打印到屏幕
In[]: data.to_csv(sys.stdout, na_rep='NULL') # 空字符处显示为NULL
In[]: data.to_csv(sys.stdout, index=False, header=False) # 禁用行和列的标签
In[]: data.to_csv(sys.stdout, index=False, cols=['a', 'b', 'c']) # 按照指定的顺序显示列
# Series中的to_csv方法
In [39]: dates = pd.date_range('1/1/2000', periods = 7)
In [40]: dates
Out[40]:
DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04', '2000-01-05', '2000-01-06', '2000-01-07'], dtype='datetime64[ns]', freq='D')
In [45]:test = Series(np.arange(7), index = dates)
In [46]: test
Out[46]:
2000-01-01 0
2000-01-02 1
2000-01-03 2
2000-01-04 3
2000-01-05 4
2000-01-06 5
2000-01-07 6
手工处理分隔符
In [50]: cat ex7.csv
"a","b","c"
"1","2","3"
"1","2","3","4"
In [51]: import csv
In [52]: f = open('ex7.csv')
In [53]: reader = csv.reader(f)
In [54]: for line in reader:
...: print line
...:
['a', 'b', 'c']
['1', '2', '3']
['1', '2', '3', '4']
# 可以对数据做一些处理
In[]: lines = list(csv.reader(open('ex7.csv')))
In[]: header, values = lines[0], lines[1:]
In[]: data_dict = {h:v for h,v in zip(header, zip(*values))}
JSON数据
JSON:JavaScript 对象表示法(JavaScript Object Notation)。JSON 是存储和交换文本信息的语法。类似 XML, 比 XML 更小、更快,更易解析,是一种比表格型文本格式灵活得多的数据格式:
obj="""{"name":"Wes",
"place_lived":["United States","Spain","Germany"],
"pet":null,
"siblings":[{"name":"Scott","age":25,"pet":"Zuko"},{"name":"Katie","age":33,"pet":"Cisco"}]}"""
•JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
•JSON 是轻量级的文本数据交换格式
•JSON 独立于语言
•JSON 具有自我描述性,更易理解
JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
JSON语法:
JSON 语法是 JavaScript 对象表示法语法的子集。
{
“employees”: [
{ “firstName”:”John” , “lastName”:”Doe” },
{ “firstName”:”Anna” , “lastName”:”Smith” },
{ “firstName”:”Peter” , “lastName”:”Jones” }
]
}
JSON 值:
JSON 值可以是:
JSON 文件:
JSON 文件的文件类型是 “.json”
JSON 文本的 MIME 类型是 “application/json”
XML和HTML:Web信息收集
Python有许多可以读写HTML和XML格式数据的库,lxml就是其中之一,它能够高效且可靠地解析大文件。找到希望获取的URL,利用urllibs将其打开,然后用lxml解析得到的数据流:
from lxml.html import parse
from urllib.request import urlopen
parsed=parse(urlopen('https://finance.yahoo.com/q/op?s=AAPL+Options'))
doc=parsed.getroot()
通过这个对象,你可以获取特定类型的所有HTML标签(tag)。使用文档根节点的findall方法以及一个XPath:
links=doc.findall('.//a')
links[15:20]
[,
,
,
,
]
要得到URL和链接文本,你必须使用各对象的get方法(针对URL)和text_content方法(针对显示文本):
lnk=links[28]
lnk
二进制数据格式
实现数据的二进制格式存储最简单的办法之一是使用Python内置的pickle序列化。为了使用方便,pandas对象都有一个用于将数据以pickle形式保存到磁盘上的save方法:
frame = pd.read_csv('ch06/ex1.csv')
frame
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo