Numpy&pandas(五)--pandas_io

import pandas as pd
import numpy as np

载入数据到 Pandas

  • 索引:将一个列或多个列读取出来构成 DataFrame,其中涉及是否从文件中读取索引以及列名
  • 类型推断和数据转换:包括用户自定义的转换以及缺失值标记
  • 日期解析
  • 迭代:针对大文件进行逐块迭代。这个是Pandas和Python原生的csv库的最大区别
  • 不规整数据问题:跳过一些行,或注释等等

索引及列名

%more data/ex1.csv
df = pd.read_csv('data/ex1.csv')
#读取csv文件

df = pd.read_csv('data/ex1.csv', sep=',')
#设置是以,为分隔符

%more data/ex2.csv
# 列名缺失
pd.read_csv('data/ex2.csv', header=None)

# 指定列名
pd.read_csv('data/ex2.csv', header=None, names=['a', 'b', 'c', 'd', 'msg'])

# 指定行索引
pd.read_csv('data/ex2.csv', header=None, names=['a', 'b', 'c', 'd', 'msg'], index_col='msg')

# 多层行索引
pd.read_csv('data/ex2.csv', header=None, names=['a', 'b', 'c', 'd', 'msg'], index_col=['msg', 'a'])

处理不规则的分隔符

%more data/ex3.csv
# 正则表达式
pd.read_table('data/ex3.csv', sep='\s+')
# pd.read_table('data/ex3.csv', sep=' ')
# pd.read_csv('data/ex3.csv')
#多个空格为分隔符

缺失值处理

%more data/ex5.csv
pd.read_csv('data/ex5.csv')
pd.read_csv('data/ex5.csv', na_values=['NA', 'NULL', 'foo'])
#将NA、NULL、foo都设置为NaN

pd.read_csv('data/ex5.csv', na_values={'message': ['foo', 'NA'], 'something': ['two']})
#用字典表来设置nan值

逐块读取数据

pd.read_csv('data/ex6.csv', nrows=10)

# 统计每个 key 出现的次数
tr = pd.read_csv('data/ex6.csv', chunksize=1000)

key_count = pd.Series([])
for pieces in tr:
    key_count = key_count.add(pieces['key'].value_counts(), fill_value=0)
key_count = key_count.sort_values(ascending=False)
key_count[:10]

保存数据到磁盘

df = pd.read_csv('data/ex5.csv')
df.to_csv('data/ex5_out.csv')
%more data/ex5_out.csv
df = pd.read_csv('data/ex5_out.csv')
#to_csv就是保存到磁盘

# 不写索引
df = pd.read_csv('data/ex5.csv')
df.to_csv('data/ex5_out.csv', index=False)
%more data/ex5_out.csv

# 不写列名称
df = pd.read_csv('data/ex5.csv')
df.to_csv('data/ex5_out.csv', index=False, header=None)
%more data/ex5_out.csv

# 指定分隔符
df = pd.read_csv('data/ex5.csv')
df.to_csv('data/ex5_out.csv', index=False, sep='|')
%more data/ex5_out.csv

# 只写出一部分列
df = pd.read_csv('data/ex5.csv')
df.to_csv('data/ex5_out.csv', index=False, columns=['a', 'b', 'message'])
%more data/ex5_out.csv

二进制格式

二进制的优点是容量小,读取速度快。缺点是可能在不同版本间不兼容。比如 Pandas 版本升级后,早期版本保存的二进制数据可能无法正确地读出来。

df = pd.read_csv('data/ex1.csv')
pd.to_pickle(df, 'data/ex1_pickle.bin')
%ls data
#储存为二进制形式

pd.read_pickle('data/ex1_pickle.bin')
#读取二进制文件

pd.to_pickle(pd.read_csv('data/ex6.csv'), 'data/ex6_pickle.bin')
%ls data
#重命名,复制

 其他格式

  • HDF5: HDF5是个C语言实现的库,可以高效地读取磁盘上的二进制存储的科学数据。
  • Excel文件: pd.read_excel/pd.ExcelFile/pd.ExcelWriter
  • JSON: 通过 json 模块转换为字典,再转换为 DataFrame
  • SQL 数据库:通过 pd.io.sql 模块来从数据库读取数据
  • NoSQL (MongoDB) 数据库:需要结合相应的数据库模块,如 pymongo 。再通过游标把数据读出来,转换为 DataFrame
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值