python 文件格式转换器_python数据转换工具Into
动机
我们花费大量的时间将数据从普通的交换格式(比如CSV),迁移到像数组、数据库或者二进制存储等高效的计算格式。更糟糕的是,许多人没有将数据迁移到高效的格式,因为他们不知道怎么(或者不能)为他们的工具管理特定的迁移方法。
你所选择的数据格式很重要,它会强烈地影响程序性能(经验规律表明会有10倍的差距),以及那些轻易使用和理解你数据的人。
当提倡Blaze项目时,我经常说:“Blaze能帮助你查询各种格式的数据。”这实际上是假设你能够将数据转换成指定的格式。
进入into项目
into函数能在各种数据格式之间高效的迁移数据。这里的数据格式既包括内存中的数据结构,比如:
列表、集合、元组、迭代器、numpy中的ndarray、pandas中的DataFrame、dynd中的array,以及上述各类的流式序列。
也包括存在于Python程序之外的持久化数据,比如:
CSV、JSON、行定界的JSON,以及以上各类的远程版本
HDF5 (标准格式与Pandas格式皆可)、 BColz、 SAS、 SQL 数据库 ( SQLAlchemy支持的皆可)、 Mongo
into项目能在上述数据格式的任意两个格式之间高效的迁移数据,其原理是利用一个成对转换的网络(该文章底部有直观的解释)。
如何使用它
into函数有两个参数:source和target。它将数据从source转换成target。source和target能够使用如下的格式:
Target Source Example
Object Object A particular DataFrame or list
String String ‘file.csv’, ‘postgresql://hostname::tablename’
Type Like list or pd.DataFrame
所以,下边是对into函数的合法调用:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>>into(list,df)# create new list from Pandas DataFrame
>>>into([],df)# append onto existing list
>>>into('myfile.json',df)# Dump dataframe to line-delimited JSON
>>>into(Iterator,'myfiles.*.csv')# Stream through many CSV files
>>>into('postgresql://hostname::tablename',df)# Migrate dataframe to Postgres
>>>into('postgresql://hostname::tablename','myfile.*.csv')# Load CSVs to Postgres
>>>into('myfile.json','postgresql://hostname::tablename')# Dump Postgres to JSON
>>>into(pd.DataFrame,'mongodb://hostname/db::collection')# Dump Mongo to DataFrame
Note that into is a single function. We’re used to doing this with various to_csv, from_sql methods on various types. The into api is very small; Here is what you need in order to get started:
注意,into函数是一个单一的函数。虽然我们习惯于在各种类型上使用to_csv, from_sql等方法来完成这样的功能,但接口into非常简单。开始使用into函数前,你需要:
Python
1
2
3
$pip install into
>>>frominto importinto
在Github上查看into工程。
实例
现在我们展示一些更深层次的相同的实例。
将Python中的list类型转换成numpy中的array类型
Python
1
2
3
4
5
>>>importnumpy asnp
>>>into(np.ndarray,[1,2,3])
array([1,2,3])
加载CSV文件,并转换成Python中的list类型
Python
1
2
3
4
5
6
7
8
9
10
11
>>>into(list,'accounts.csv')
[(1,'Alice',100),
(2,'Bob',200),
(3,'Charlie',300),
(4,'Denis',400),
(5,'Edith',500)]
将CSV文件转换成JSON格式
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
>>>into('accounts.json','accounts.csv')
$head accounts.json
{"balance":100,"id":1,"name":"Alice"}
{"balance":200,"id":2,"name":"Bob"}
{"balance":300,"id":3,"name":"Charlie"}
{"balance":400,"id":4,"name":"Denis"}
{"balance":500,"id":5,"name":"Edith"}
将行定界的JSON格式转换成Pandas中的DataFrame格式
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>>importpandas aspd
>>>into(pd.DataFrame,'accounts.json')
balance idname
01001Alice
12002Bob
23003Charlie
34004Denis
45005Edith
它是如何工作的?
格式转换是有挑战性的。任意两个数据格式之间的健壮、高效的格式转换,都充满了特殊情况和奇怪的库。常见的解决方案是通过一个通用格式,例如DataFrame或流内存列表、字典等,进行格式转换。(见dat)或者通过序列化格式,例如ProtoBuf或Thrift,进行格式转换。这些都是很好的选择,往往也是你想要的。然而有时候这样的转换是比较慢的,特别是当你在实时计算系统上转换,或面对苛刻的存储解决方案时。
考虑一个例子,在numpy.recarray和pandas.DataFrame之间进行数据迁移。我们可以非常快速地,适当地迁移这些数据。数据的字节不需要更改,只更改其周围的元数据即可。我们不需要将数据序列化到一个交换格式,或转换为中间的纯Python对象。
考虑从CSV文件迁移数据到一个PostgreSQL数据库。通过SQLAlchemy(注:一个Python环境下的数据库工具箱)使用Python迭代器,我们的迁移速度不太可能超过每秒2000条记录。然而使用PostgreSQL自带的CSV加载器,我们的迁移速度可以超过每秒50000条记录。花费一整晚的时间和花费一杯咖啡的时间进行数据迁移,是有很大区别的。然而这需要我们在特殊情况下,能足够灵活的使用特殊代码。
专门的两两互换工具往往比通用解决方案快一个数量级。
Into项目是那些成对地数据迁移组成的一个网络。我们利用下图展示这个网络:
每个节点是一种数据格式。每个定向的边是一个在两种数据格式之间转换数据的函数。into函数的一个调用,可能会遍历多个边和多个中间格式。例如,当我们将CSV文件迁移到Mongo数据库时,我们可以采取以下路径:
•将CSV文件加载到DataFrame中(利用pandas.read_csv)
•然后转换为np.recarray(利用DataFrame.to_records)
•接着转换为一个Python的迭代器类型(利用np.ndarray.tolist)
•最终转换成Mongo中的数据(利用pymongo.Collection.insert)
或者我们可以使用MongoDB自带的CSV加载器,编写一个特殊函数,用一个从CSV到Mongo的定向边缩短整个处理过程。
为了找到最有效的路线,我们利用相对成本(引入权重的ad-hoc)给这个网络的所有边赋予权重值。然后我们使用networkx找到最短路径,进而进行数据迁移。如果某个边由于某种原因失败了(引发NotImplementedError),我们可以自动重新寻找路径。这样我们的迁移方法是既高效又健壮的。
注意,我们给某些节点涂上红色。这些节点的数据量可以大于内存。当我们在两个红色节点之间进行数据迁移时(输入和输出的数据量都可能大于内存),我们限制我们的路径始终在红色子图中,以确保迁移路径中间的数据不会溢出。需要注意的一种格式是chunks(…),例如chunks(DataFrame)是一个可迭代的,在内存中的DataFrames。这个方便的元格式允许我们在大数据上使用紧凑的数据结构,例如numpy的arrays和pandas的DataFrames,同时保持在内存中数据的只有几十兆字节。
这种网络化的方法允许开发者对于特殊情况编写专门的代码,同时确信这段代码只在正确的情况下使用。这种方法允许我们利用一个独立的、可分离的方式处理一个非常复杂的问题。中央调度系统让我们保持头脑清醒。
历史
很久以前,我写过into链接到Blaze的文章,然后我立即就沉默了。这是因为旧的实现方法(网络方法之前)很难扩展或维护,也没有准备好进入其黄金期。
我很满意这个网络。意想不到的应用程序经常能够正常运行,into工程现在也准备好进入其黄金期了。Into工程可以通过conda和pip得到,而独立于Blaze。它主要的依赖为NumPy、Pandas和NetworkX,所以对于阅读我博客的大部分人来说,它算是相对轻量级的。如果你想利用一些性能更好的格式,例如HDF5,你将同样需要安装这些库(pro-tip,使用conda安装)。
如何开始使用into函数
你应该下载一个最近版本的into工程。
Python
1
2
3
4
5
$pip install--upgrade git+https://github.com/ContinuumIO/into
or
$conda install into--channel blaze
然后你可能想要通过该教程的上半部分,或者阅读该文档。
又或者不阅读任何东西,只是试一试。我的希望是,这个接口很简单(只有一个函数!),用户可以自然地使用它。如果你运行中出现了问题,那么我很愿意在blaze-dev@continuum.io中听到它们。
python 文件格式转换器_python数据转换工具Into相关推荐
- python 文件格式转换器_python文件格式转换
一.文件的基本操作 1.打开文件 1 f=open('text.txt',r) 2.读取文件 print(f.read) 3.关闭文件 f.close() 比较好用的是运用with with open ...
- python 文件格式转换_Python的处理数据,如何进行数据转换,学会三种方式
平时我们在处理数据的时候,有些数据类型不是我们想要的,怎么办? 如: python数据转换 num01,num02是str类型,但是我们需要的是整型,所以通过int转换成了整数. 数据转换 如何完成数 ...
- python 状态机教程_python 实用工具状态机transitions
说明 1. 状态机是一个非常实用的理论.在涉及到复杂的场景,建立状态机模型,能带来极大的方便.比如,网络连接.模型状态.业务逻辑. 2. 状态机并不复杂, 重要的是它的思想,能够极大减轻复杂度.使用时 ...
- python 文件格式转换_python实现txt文件格式转换为arff格式
本文实例为大家分享了python实现txt文件格式转换为arff格式的具体代码,供大家参考,具体内容如下 将文件读取出来的时候默认都是字符型的,所以有转换出来有点问题,但是还是可以用的. 文件要求第一 ...
- python数据分析软件_Python数据分析工具
Numpy Python没有提供数组功能,虽然列表可以完成基本的数组功能,但他不是真正的数组.Numpy内置函数处理速度是c语言级别,因此尽量使用内置函数,避免出现效率瓶颈的现象. Numpy的安装: ...
- python画国际象棋_python图形工具turtle绘制国际象棋棋盘
本文实例为大家分享了python图形工具turtle绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下 #编写程序绘制一个国际象棋的棋盘 import turtle turtle.speed(30) ...
- python 表示图论_Python 图论工具 | 学步园
networkx: 一个用Python语言开发的图论与复杂网络建模工具, 内置了常用的图与复杂网络分析 可以方便的进行复杂网络数据分析.仿真建模等工作. 依赖工具: numpy pyparsing d ...
- python图论库_Python 图论工具
networkx: 一个用Python语言开发的图论与复杂网络建模工具, 内置了常用的图与复杂网络分析算法, 可以方便的进行复杂网络数据分析.仿真建模等工作. 依赖工具: numpy pyparsin ...
- python图像几何变换_python 图像工具opencv3实例(对象识别和增强现实)1-图像几何转换...
安装OpenCV-Python安装 本教程基于python3,ubuntu 16,在windows环境可能可以运行. Linux#!pythonpip3 install opencv-python W ...
最新文章
- 5GtoB即将迎来规模商用,如何共创行业新价值?
- lync 2013 企业版部署 (四)安装office web app server
- notepad设置中文
- WebSen!NT的行业分类说明
- 使用Cucumber+Rspec玩转BDD(2)——邮件激活
- 有人问现在做自媒体还有前途吗?还有钱赚吗?
- Windows下PowerShell监控Keepalived
- 兄弟打印机内存已满清零方法_brother打印机怎么清零?brother打印机清零方法
- 【读点论文】ViTGAN: Training GANs with Vision Transformers 将视觉transformer和gan结合起来
- mysql创建book表_【mysql】表的创建以及基本操作
- Python实战回归模型-消费者人群画像-信用智能评分(基于中国移动用户数据)
- java-net-php-python-jspm智守护学生健康管理系统软件设计与开发计算机毕业设计程序
- PMP证书含金量再次提升,纳入北京工作居住证办理范围
- 软考-高级-信息系统项目管理师
- linux 绑定腾讯域名解析,一步步配置腾讯云服务器ubuntu 通过域名访问自己的网页tomcat(详细基础)...
- 安卓手机小说阅读器_百万小说阅读器app免费版下载-百万小说阅读器app手机版下载v1.4...
- 【Python 实战基础】Pandas如何输出表格数据标题名称列表
- 程序员晋升答辩的3个大坑!
- 【陀螺财经】数字货币每日行情简报0213
- 如何让谷歌、百度和雅虎收录你的网站,编入索引