数据科学(十)
数据格式
-
csv:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。
- pickle:二进制的优点是容量小,读取速度快。缺点是可能在不同版本间不兼容
- HDF5: HDF5是个C语言实现的库,可以高效地读取磁盘上的二进制存储的科学数据。
- Excel文件: pd.read_excel/pd.ExcelFile/pd.ExcelWriter
- JSON: 通过 json 模块转换为字典,再转换为 DataFrame
- SQL 数据库:通过 pd.io.sql 模块来从数据库读取数据
- NoSQL (MongoDB) 数据库:需要结合相应的数据库模块,如 pymongo 。再通过游标把数据读出来,转换为 DataFrame
本博客以csv和pickle为例
csv
载入数据到 Pandas
需要注意和学习的
- 索引:将一个列或多个列读取出来构成 DataFrame,其中涉及是否从文件中读取索引以及列名
- 类型推断和数据转换:包括用户自定义的转换以及缺失值标记
- 日期解析
- 迭代:针对大文件进行逐块迭代。这个是Pandas和Python原生的csv库的最大区别
- 不规整数据问题:跳过一些行,或注释等等
分隔
pd.read_csv(‘文件名’, sep=‘分隔符’)
缺失
pd.read_csv(‘文件名’, header=None)
指定读取
指定列名
pd.read_csv(‘文件名’, header=None, names=[‘列1’, ‘列2’])
指定行索引
pd.read_csv(‘文件名’, header=None, names=[‘列1’, ‘列2’], index_col=‘索引名’)
指定多层索引
pd.read_csv(‘文件名’, header=None, names=[‘列1’, ‘列2’], index_col=[‘索引名1’,‘索引名2’])
逐块读取
pd.read_csv(‘文件名’, nrows=数量)
处理
正则表达式
符号不定
pd.read_table(‘文件名’, sep=’\s+’)
缺失值处理
默认把NaN Na作为缺失值
pd.read_csv(‘文件名’, na_values=[‘设定的缺失值’, ‘设定的缺失值’, '设定的缺失值’])
设定某列缺失值‘
pd.read_csv(‘文件名’, na_values={‘列1’: [‘设定的缺失值’, ‘设定的缺失值’], ‘列2’: [‘设定的缺失值’]})
统计次数?
tr = pd.read_csv('文件名, chunksize=一次读的行数)
key_count = pd.Series([])
#add 填充默认值
for pieces in tr:
key_count = key_count.add(pieces['key'].value_counts(), fill_value=0)
#打印出现最多的前十的字母
key_count = key_count.sort_values(ascending=False)
print(key_count[:10])
保存数据到磁盘
不写索引
df.to_csv(‘新文件名’, index=False)
不写列名
df.to_csv(‘新文件名’, index=False, header=None)
指定分隔符
df.to_csv(‘新文件名’, index=False, sep=’|’)
只写一部分
df.to_csv(‘新文件名’, index=False, columns=[‘列1’, ‘列2’])
import pandas as pd
import numpy as np
## 载入数据到 Pandas