05_《利用python进行数据分析》第二版 学习笔记

    系列文章目录

提示:仅记录个人的学习心得,欢迎交流

(占位,以后再补 ……………………)


前言

对python语言基础中记忆不牢的进行总结,希望自己能坚持下去!为了学习计算机视觉做准备!

本次介绍本书第六章的内容。关于文件的操作都是些常见的操作,阅读别人代码时可能很容易的了解功能,但是自己使用的时候往往会犯难,所以重点要掌握怎么用,能完成哪些操作,加油!


一、文本格式数据的读写

1.1 文本文件读写的基本操作

将表格型数据读取为DataFrame对象是pandas的重要特性。

csv文件就是以逗号为分隔符的文件,系统默认是以excle表格的形式打开。其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。

table文件就是表格形式的数据,有三个重点:a)表格模式;b)每列必须有名字; c)不同列的数据类型可以不一样,但同一列数据类型必须一样。

 我们常用的可能就是read_csv()、read_table()两个函数,通过传递这些函数中的某些参数可以实现一些特定的功能:

import numpy as np
import pandas as pd
result = pd.read_csv('./ex1.csv',na_values='NULL')
print(result)
>>>   something  a   b     c   d message 
    0       one  1   2   3.0   4      NaN
    1      two   5   6   NaN   8    world
    2     three  9  10  11.0  12      foo

# 在字典中可以指定不同的缺失值标识
sentinels = {'message':['foo','NA'],'something':['two']}
print(pd.read_csv('./ex1.csv', na_values=sentinels))
>>>   something  a   b     c   d message 
    0       one  1   2   3.0   4      NaN
    1      two   5   6   NaN   8    world
    2     three  9  10  11.0  12      foo

如果table文件的分割符不是逗号,而实不同数量的空格时,则需要用到参数sep= ' \s+ '(这是一个正则表达式可以处理数量不同的空格为分隔符时的情况。同理sep=分隔每行的字符序列或正则表达式。

1.2 分块读入文本文件

当处理大型文件或者找出正确的参数集来正确处理大文件时,你可能需要读入文件的一个小片段或者按小块遍历文件。

import numpy as np
import pandas as pd

pd.options.display.max_rows = 10
result = pd.read_csv('./ex2.csv')
print(result)
>>>            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
    ...        ...       ...       ...       ...  ..
    2994  0.068804  1.322759  0.802346  0.223618   0
    2995  2.311896 -0.417070 -1.409599 -0.515821   H
    2996 -0.479893 -0.650419  0.745152 -0.646038   U
    2997  0.523331  0.787112  0.486066  1.093156   A
    2998 -0.362559  0.598894 -1.843201  0.887292   Y
    [2999 rows x 5 columns]

tot = pd.Series([])
for piece in result:
    tot = tot.add(piece['key'].value_counts(), fill_value=0)
tot = tot.sort_values(ascending=False)
print(tot)
>>> O    132.0
    X    116.0
    L    109.0
    F    108.0
    H    107.0
         ...  
    8     46.0
    3     46.0
    5     43.0
    1     40.0
    2     39.0
    Length: 36, dtype: float64

如果要分块读入文件,可以使用参数chunksize此时read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代。get_chunk(size)函数可以获取size大小的chunk(下标从0开始)。

1.3 将数据写入文本格式

主要是使用.to_csv()函数,和设定该函数的相关参数完成写入文本的目的。

参数介绍:① sep= :设置分隔符

                  ② na_rep= :对缺失值进行标注的标识值

                  ③ index=False, hearder=False :写入的不写入行、列的标签。

                  ④ colums=[] :按照所给定的列表顺序写入文件

1.4 使用分隔格式

对于大多数表格类型的文件read_table()函数都可以从硬盘中读取文件。但是对于有些分隔符不规则,或者对于一行或者时多行错误的文件,read_table()函数就不起作用。对于任何带有单字符分隔符的文件,你可以使用python的内建csv模块。

import csv
f = open('../pydata-book-3rd-edition/examples/ex7.csv')
reader = csv.reader(f)
for lines in reader:
    print(lines)
>>> ['a', 'b', 'c']
    ['1', '2', '3']
    ['1', '2', '3']

之后,就可以进行一些必要的处理,以将数据整理为需要的形式。

import csv
f = open('../pydata-book-3rd-edition/examples/ex7.csv')
lines = list(csv.reader(f))
print(lines)
>>> [['a', 'b', 'c'], ['1', '2', '3'], ['1', '2', '3']]

header, values = lines[0], lines[1:]
data_dict = {h: v for h, v in zip(header, zip(*values))}
print(data_dict)
>>> {'a': ('1', '1'), 'b': ('2', '2'), 'c': ('3', '3')}

CSV文件有多种不同的风格,若果需要根据不同的分隔符、字符串引用约定或行终止符定义一种新的形式的格式时,我们可以用csv.Dialect 定义一个简单的子类;也可以不必定义子类,直接将CSV方言参数传入csv.reader的关键字参数:

"""使用csv.Dialect定义一个子类"""
class my_dialect(csv.Dialect):
    lineterminator = '\n'
    delimiter = ';'
    quotechar = '"'
    quoting = csv.QUOTE_MINIMAL

reader = csv.reader(f, dialect=my_dialect)
print(reader)
>>> <_csv.reader object at 0x00000144617E85E0>

"""直接将CSV语支参数传入csv.reader"""
reader = csv.reader(f, delimiter='|')
print(reader)
>>> <_csv.reader object at 0x00000278FED185E0>

 写入文件的时候可以使用csv.wirter(),这个函数可以接受的参数和csv.reader()类似。

 1.5 JSON数据

Json已经成为Web浏览器和其他用用间通过HTTP请求发送数据的标准形式。比CSV等表格文本更为自由。除了它空值NULL和列表末尾不允许有逗号等一些细微差别,JSON更接近的python代码

Python中的标准库json,可以使用json.loads()方法将json对象转换为python对象,                                                                 也可以使用json.dumps()方法转换回python对象。

pandas.read_json可以自动将JSON数据集按照指定的次序转换为Series或DataFrame。pandas.read_json的默认选项是假设JSON数组中的每个对象是表里的一行。                                  如果要从pandas中数据导出为JSON,可以对Series和DataFrame使用to_json()方法。

# 命令行运行
$ cat ../pydata-book-3rd-edition/examples/example.json 
[{"a": 1, "b": 2, "c": 3},
 {"a": 4, "b": 5, "c": 6},
 {"a": 7, "b": 8, "c": 9}]


import pandas as pd

data = pd.read_json('../pydata-book-3rd-edition/examples/example.json')
print(data)
>>>    a  b  c
    0  1  2  3
    1  4  5  6
    2  7  8  9

 1.6 XML和HTML:网络抓取

pandas.read_html()函数

(这部分介绍的太简单了吧,也没看懂......)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值