当前位置:   article > 正文

05_《利用python进行数据分析》第二版 学习笔记_csv.reader(f)

csv.reader(f)

    系列文章目录

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

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


前言

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

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


一、文本格式数据的读写

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

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

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

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

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

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

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

1.2 分块读入文本文件

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

  1. import numpy as np
  2. import pandas as pd
  3. pd.options.display.max_rows = 10
  4. result = pd.read_csv('./ex2.csv')
  5. print(result)
  6. >>> one two three four key
  7. 0 0.467976 -0.038649 -0.295344 -1.824726 L
  8. 1 -0.358893 1.404453 0.704965 -0.200638 B
  9. 2 -0.501840 0.659254 -0.421691 -0.057688 G
  10. 3 0.204886 1.074134 1.388361 -0.982404 R
  11. 4 0.354628 -0.133116 0.283763 -0.837063 Q
  12. ... ... ... ... ... ..
  13. 2994 0.068804 1.322759 0.802346 0.223618 0
  14. 2995 2.311896 -0.417070 -1.409599 -0.515821 H
  15. 2996 -0.479893 -0.650419 0.745152 -0.646038 U
  16. 2997 0.523331 0.787112 0.486066 1.093156 A
  17. 2998 -0.362559 0.598894 -1.843201 0.887292 Y
  18. [2999 rows x 5 columns]
  19. tot = pd.Series([])
  20. for piece in result:
  21. tot = tot.add(piece['key'].value_counts(), fill_value=0)
  22. tot = tot.sort_values(ascending=False)
  23. print(tot)
  24. >>> O 132.0
  25. X 116.0
  26. L 109.0
  27. F 108.0
  28. H 107.0
  29. ...
  30. 8 46.0
  31. 3 46.0
  32. 5 43.0
  33. 1 40.0
  34. 2 39.0
  35. 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模块。

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

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

  1. import csv
  2. f = open('../pydata-book-3rd-edition/examples/ex7.csv')
  3. lines = list(csv.reader(f))
  4. print(lines)
  5. >>> [['a', 'b', 'c'], ['1', '2', '3'], ['1', '2', '3']]
  6. header, values = lines[0], lines[1:]
  7. data_dict = {h: v for h, v in zip(header, zip(*values))}
  8. print(data_dict)
  9. >>> {'a': ('1', '1'), 'b': ('2', '2'), 'c': ('3', '3')}

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

  1. """使用csv.Dialect定义一个子类"""
  2. class my_dialect(csv.Dialect):
  3. lineterminator = '\n'
  4. delimiter = ';'
  5. quotechar = '"'
  6. quoting = csv.QUOTE_MINIMAL
  7. reader = csv.reader(f, dialect=my_dialect)
  8. print(reader)
  9. >>> <_csv.reader object at 0x00000144617E85E0>
  10. """直接将CSV语支参数传入csv.reader"""
  11. reader = csv.reader(f, delimiter='|')
  12. print(reader)
  13. >>> <_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()方法。

  1. # 命令行运行
  2. $ cat ../pydata-book-3rd-edition/examples/example.json
  3. [{"a": 1, "b": 2, "c": 3},
  4. {"a": 4, "b": 5, "c": 6},
  5. {"a": 7, "b": 8, "c": 9}]
  6. import pandas as pd
  7. data = pd.read_json('../pydata-book-3rd-edition/examples/example.json')
  8. print(data)
  9. >>> a b c
  10. 0 1 2 3
  11. 1 4 5 6
  12. 2 7 8 9

 1.6 XML和HTML:网络抓取

pandas.read_html()函数

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/212547
推荐阅读
相关标签
  

闽ICP备14008679号