您的位置:首页 > 编程语言 > Python开发

利用python进行数据分析-数据加载、存储与文件格式1

2016-06-12 17:07 946 查看
1.读写文本格式的数据

pandas提供了一些将表格型数据读取为DataFrame对象的函数



大致介绍下这些函数在将文本数据转换为DataFrame时所用到的一些技术。这些函数的选项可以划分为以下几个大类



df=pd.read_csv('ex1.csv')

print df

结果为:

a b c d message

0 1 2 3 4 hello

1 5 6 7 8 world

2 9 10 11 12 foo

我们也可以用read_table,只不过需要指定分隔符

print pd.read_table('ex1.csv',sep=',')

并不是所有文件都有标题行,读入该文件的方法有2个。可以让pandas为其分配默认的列名,也可以自定义列名

print pd.read_csv('data/ex2.csv',header=None)

print pd.read_csv('data/ex2.csv',names=['a','b','c','d','message'])

结果为:

0 1 2 3 4

0 1 2 3 4 hello

1 5 6 7 8 world

2 9 10 11 12 foo

a b c d message

0 1 2 3 4 hello

1 5 6 7 8 world

2 9 10 11 12 foo

假设希望将message列做成DataFrame的索引。

names=['a','b','c','d','message']

print pd.read_csv('data/ex2.csv',names=names,index_col='message')

结果为:

a b c d

message

hello 1 2 3 4

world 5 6 7 8

foo 9 10 11 12

如果希望将多个列做成一个层次化索引,只需传入一个由列编号或列名组成的列表即可

parsed=pd.read_csv('data/csv_mindex.csv',index_col=['key1','key2'])

print parsed

结果为:

value1 value2

key1 key2

one a 1 2

b 3 4

c 5 6

d 7 8

two a 9 10

b 11 12

c 13 14

d 15 16

有些表格可能不是固定的分隔符去分隔字段的。对于这种情况,可以编写一个正则表达式来作为read_table的分隔符

result=pd.read_table('data/ex3.txt',sep='\s+')

print result

结果为:

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

这些解析器函数还有许多参数可以帮助你处理各种各样的异形文件格式。比如说,你可以用skiprows跳过文件的第一行、第三行和第四行

print pd.read_csv('data/ex4.csv',skiprows=[0,2,3])

结果为:

a b c d message

0 1 2 3 4 hello

1 5 6 7 8 world

2 9 10 11 12 foo

缺失值处理是文件解析任务中的一个重要组成部分。默认情况下,pandas会用一组经常出现的标记值进行识别,如NA、-1.#IND以及NULL等

result2=pd.read_csv('data/ex5.csv')

print result2

print pd.isnull(result2)

结果为:

something a b c d message

0 one 1 2 3 4 NaN

1 two 5 6 NaN 8 world

2 three 9 10 11 12 foo

something a b c d message

0 False False False False False True

1 False False False True False False

2 False False False False False False

na_values可以接受一组用于表示缺失值的字符串

result3=pd.read_csv('data/ex5.csv',na_values=['NULL'])

print result3

结果为:

something a b c d message

0 one 1 2 3 4 NaN

1 two 5 6 NaN 8 world

2 three 9 10 11 12 foo

可以用一个字典为各列指定不同的NA标记值

sentinels={'message':['foo','NA'],'something':['two']}

print pd.read_csv('data/ex5.csv',na_values=sentinels)

结果为:

something a b c d message

0 one 1 2 3 4 NaN

1 NaN 5 6 NaN 8 world

2 three 9 10 11 12 NaN







2.逐块读取文本文件

result4=pd.read_csv('data/ex6.csv',nrows=5)

print result4

结果为:

one two three four key

0 0.467976 -0.038649 -0.295344 -1.824726 L

1 -0.358893 1.404453 0.704965 -0.200638 B

2 -0.501840 0.659254 -0.421691 -0.057688 G

3 0.204886 1.074134 1.388361 -0.982404 R

4 0.354628 -0.133116 0.283763 -0.837063 Q

要逐块读取文件,需要设置chunksize(行数)

chunker=pd.read_csv('data/ex6.csv',chunksize=1000)

print chunker

结果为:

<pandas.io.parsers.TextFileReader object at 0x00000000092BFC18>

read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代。比如,我们可以迭代处理ex6.csv,将值计数聚合到“key”列中

chunker=pd.read_csv('data/ex6.csv',chunksize=1000)

tot=Series([])

for piece in chunker:

tot=tot.add(piece['key'].value_counts(),fill_value=0)

tot=tot.order(ascending=False)

print tot[:10]

结果为:

E 368

X 364

L 346

O 343

Q 340

M 338

J 337

F 335

K 334

H 330

dtype: float64

TextParser还有一个get_chunk方法,它使你可以读取任意大小的块
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 数据分析