# 数据输入
# 文件读取
常用函数如下:
| 函数 | 说明 |
|---|---|
| read_csv | 读取默认以逗号作为分隔符的文件 |
| read_table | 读取默认以制表符分隔的文件 |
| read_fwf | 从特定宽度格式的文件中读取数据(无分隔符) |
| read_clipboard | read_table的剪贴板版本 |
| read_excel | 从EXCEL的XLS或者XLSX文件中读取数据 |
| read_hdf | 读取用pandas存储的HDF5文件 |
| read_html | 从HTML文件中读取所有表格数据 |
| read_json | 从JSON字符串中读取数据 |
| read_msgpack | 读取MessagePack格式存储的任意对象 |
| read_pickle | 读取以Python Pickle格式存储的对象 |
| read_sas | 读取SAS系统中定制存储格式的数据集 |
| read_sql | 将SQL查询的结果读取出来 |
| read_stata | 读取stata格式的数据集 |
| read_feather | 读取Feather二进制格式 |
在Pandas的使用场景中,最多的是将表格型的数据读取为DataFrame对象。实现这一功能的函数有很多,最常用的是
read_csv和read_table。通常第一行默认会被当成列索引,需要设置head=None
设置sep=""(支持正则)指定分隔符(这种情况下read_csv 和read_table没有什么区别)
设置usecols指定读取哪些列
设置skiprows指定跳过哪些行
设置na_values指定将哪些值当成缺失值看待
In [30]: result = pd.read_csv('d:/ex5.csv') In [31]: result Out[31]: 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 In [40]: result = pd.read_csv('d:/ex5.csv',na_values=[3.0]) In [41]: result Out[41]: something a b c d message 0 one 1 2 NaN 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 foo可以为不同列指定不同的缺失值标识-传入列名为键的字典即可
In [42]: f = {'message':['foo','NA'],'something':['two']} In [43]: result = pd.read_csv('d:/ex5.csv',na_values=f) In [44]: result Out[44]: something a b c d message 0 one 1 2 3.0 4 NaN 1 NaN 5 6 NaN 8 world 2 three 9 10 11.0 12 NaN
常用参数如下:
参数 说明 path 文件路径 sep 指定分隔符或正则表达式 header 用作列名的行号 index_col 用作行索引的列名或列号 names 结果的列名列表 skiprows 从起始处,需要跳过的行 na_values 需要用NaN替换的值 comment 在行结尾处分隔注释的字符 parse_dates 尝试将数据解析为datetime,默认是False keep_date_col如果连接列到解析日期上,保留被连接的列,默认False converters 包含列名称映射到函数的字典 dayfirst 解析非明确日期时,按国际格式处理 date_parser 用于解析日期的函数 nrows 从文件开头处读入的行数 iterator 返回一个TextParser对象,用于零散地读入文件 chunksize 用于迭代的块大小 skip_footer 忽略文件尾部的行数 verbose 打印各种解析器输出的信息 encoding 文本编码,比如UTF-8 thousands 定义千位分隔符,例如逗号或者圆点
使用
read_json函数可以自动将JSON数据集按照指定的顺序转换为Series或者DataFrame对象,其默认做法是假设JSON数据中的每个对象是表里的一行[{"a": 1, "b": 2, "c": 3}, {"a": 4, "b": 5, "c": 6}, {"a": 7, "b": 8, "c": 9}] In [81]: data = pd.read_json('d:/example.json') In [82]: data Out[82]: a b c 0 1 2 3 1 4 5 6 2 7 8 9使用to_json函数可以将pandas对象转换为json格式
In [83]: print(data.to_json()) {"a":{"0":1,"1":4,"2":7},"b":{"0":2,"1":5,"2":8},"c":{"0":3,"1":6,"2":9}}
使用read_excel和write_excel从Excle 2003或更高版本文件中读写数据
In [106]: df = pd.read_excel('d:/ex1.xlsx', 'Sheet1') # 读取指定的表 In [107]: df Out[107]: a b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 foodf.to_excel('d:/ex3.xlsx')
文件分块读取
设置nrows指定从文件开始只读取前n行
设置chunksize作为每一块的行数,分块读入文件
- 返回的结果是一个可迭代对象
In [50]: chunker = pd.read_csv('d:/ex6.csv', chunksize=1000) In [51]: chunker Out[51]: <pandas.io.parsers.TextFileReader at 0x2417d6cfb38># 遍历并对‘key’列进行聚合获得计数值: In [52]: total = pd.Series([]) In [53]: for piece in chunker: ...: total = total.add(piece['key'].value_counts(), fill_value=0) ...: total = total.sort_values(ascending=False) In [54]: total Out[54]: E 368.0 X 364.0 L 346.0 O 343.0 Q 340.0 ... 5 157.0 2 152.0 0 151.0 9 150.0 1 146.0 Length: 36, dtype: float64 In [55]: total[:10] Out[55]: E 368.0 X 364.0 L 346.0 O 343.0 Q 340.0 M 338.0 J 337.0 F 335.0 K 334.0 H 330.0 dtype: float64