初识 pandas (2)

读取 csv 文件
关于 csv 文件

csv 是一种通用的、相对简单的文件格式,在表格类型的数据中用途很广泛,很多关系型数据库都支持这种类型文件的导入导出,并且 excel 这种常用的数据表格也能和 csv 文件之间转换。

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须象二进制数字那样被解读的数据。CSV 文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

从上述维基百科的叙述中,重点要解读出“字段间分隔符”“最常见的是逗号或制表符”,当然,这种分隔符也可以自行制定。比如下面这个我命名为 marks.csv 的文件,就是用逗号(必须是半角的)作为分隔符:

name,physics,python,math,english
Google,100,100,25,12
Facebook,45,54,44,88
Twitter,54,76,13,91
Yahoo,54,452,26,100

其实,这个文件要表达的事情是(如果转化为表格形式):
这里写图片描述

1.普通方法读取

最简单、最直接的就是 open() 打开文件:

print('====csv====')
with open(r".\test_pandas\marks.csv") as f:
    for line in f:
        print (line)
'''
====csv====
name,physics,python,math,english

Google,100,100,25,12

Facebook,45,54,44,88

Twitter,54,76,13,91

Yahoo,54,452,26,100
'''

此方法可以,但略显麻烦。

Python 中还有一个 csv 的标准库,足可见 csv 文件的使用频繁了。csv 模块提供的属性和方法。

import csv
print(dir(csv))
'''
['Dialect', 'DictReader', 'DictWriter', 'Error', 'QUOTE_ALL', 
'QUOTE_MINIMAL', 'QUOTE_NONE', 'QUOTE_NONNUMERIC', 'Sniffer', 'StringIO', 
'_Dialect', '__all__', '__builtins__', '__cached__', '__doc__', 
'__file__', '__loader__', '__name__', '__package__', '__spec__', 
'__version__', 'excel', 'excel_tab', 'field_size_limit', 'get_dialect', 
'list_dialects', 're', 'reader', 'register_dialect', 'unix_dialect', 
'unregister_dialect', 'writer']
'''

可以看到csv的使用有所改善,读取的row 是一个list。

csv_reader = csv.reader(open(r".\test_pandas\marks.csv"))
for row in csv_reader:
    print(row)
'''
['name', 'physics', 'python', 'math', 'english']
['Google', '100', '100', '25', '12']
['Facebook', '45', '54', '44', '88']
['Twitter', '54', '76', '13', '91']
['Yahoo', '54', '452', '26', '100']
'''

2.用 Pandas 读取

那么看看 Pandas 的效果:

marks = pd.read_csv(r".\test_pandas\marks.csv")
print(marks)
'''
       name  physics  python  math  english
0    Google      100     100    25       12
1  Facebook       45      54    44       88
2   Twitter       54      76    13       91
3     Yahoo       54     452    26      100
'''

看了这样的结果,你还不感觉惊讶吗?你还不喜欢上 Pandas 吗?这是多么精妙的显示。它是什么?它就是一个 DataFrame 数据。

还有另外一种方法:

p = pd.read_table(r".\test_pandas\marks.csv", sep=",")
print(p)
    '''
           name  physics  python  math  english
	0    Google      100     100    25       12
	1  Facebook       45      54    44       88
	2   Twitter       54      76    13       91
	3     Yahoo       54     452    26      100
    '''

一系列

>>> marks.index
Int64Index([0, 1, 2, 3], dtype=int64)
>>> marks.columns
Index([name, physics, python, math, english], dtype=object)
>>> marks['name'][1]
'Facebook'

排序这里有很多,现在不提。

marks = pd.read_csv(r"D:\PythonFiles\filesPython35\18firstYear\test_pandas\marks.csv")
    print(marks)
    '''
    name  physics  python  math  english
0    Google      100     100    25       12
1  Facebook       45      54    44       88
2   Twitter       54      76    13       91
3     Yahoo       54     452    26      100
    '''
    # 按照竖列"Python"的值排队
    marks_sorted = marks.sort_values(by="python")
    print(marks_sorted)
    '''
           name  physics  python  math  english
1  Facebook       45      54    44       88
2   Twitter       54      76    13       91
0    Google      100     100    25       12
3     Yahoo       54     452    26      100
    '''
    # 下面几个操作,也是常用到的,并且秉承了 Python 的一贯方法,切片:
    s1 = marks[:1]
    print(s1)
    '''
         name  physics  python  math  english
    0  Google      100     100    25       12
    '''
    s2 = marks[1:2]
    print(s2)
    '''
           name  physics  python  math  english
    1  Facebook       45      54    44       88
    '''
    s3 = marks["physics"]
    print(s3)
    '''
    0    100
    1     45
    2     54
    3     54
    Name: physics, dtype: int64
    '''

可以说,当你已经掌握了通过 dir() 和 help() 查看对象的方法和属性时,就已经掌握了 pandas 的用法,其实何止 pandas,其它对象都是如此。

3.读取其它格式数据

csv 是常用来存储数据的格式之一,此外常用的还有 MS excel 格式的文件,以及 json 和 xml 格式的数据等。它们都可以使用 pandas 来轻易读取。

.xls 或者 .xlsx

在下面的结果中寻觅一下,有没有跟 excel 有关的方法?
虽然没有类似 read_csv() 的方法(在网上查询,有的资料说有 read_xls() 方法,那时老黄历了),但是有 ExcelFile 类,前提我首先把 csv 文件格式 转换成 xlsx 格式的文件,然后:

xls = pd.ExcelFile(r".\test_pandas\marks.xlsx")

报错:

# ImportError: No module named openpyxl

安装 pip install openpyxl
再次报错;没有安装 xlrd

Traceback (most recent call last):
  File "D:\python35\lib\site-packages\pandas\io\excel.py", line 261, in __init__
    import xlrd
ImportError: No module named 'xlrd'

ImportError: Install xlrd >= 0.9.0 for Excel support

xls = pd.ExcelFile(r".\test_pandas\marks.xlsx")
print(dir(xls))
print(xls.sheet_names)
sheet1 = xls.parse("marks")
print(sheet1)

结果显示:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__',
 '__enter__', '__eq__', '__exit__', '__format__', '__fspath__', 
 '__subclasshook__', '__weakref__', '_io', '_parse_excel',
  '_should_parse', 'book', 'close', 'io', 'parse', 'sheet_names']
['marks']
       name  physics  python  math  english
0    Google      100     100    25       12
1  Facebook       45      54    44       88
2   Twitter       54      76    13       91
3     Yahoo       54     452    26      100

从结果中可以看到,sheet1 也是一个 DataFrame 对象。

对于单个的 DataFrame 对象,如何通过属性和方法进行操作,如果读者理解了本教程从一开始就贯穿进来的思想——利用 dir() 和 help() 或者到官方网站,看文档!

初识pandas (1)
初识 pandas (2)
初识 pandas (3):绘图
参考资料:链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值