处理表格数据的python工具包

meza的Python项目详细描述


meza:一个处理表格数据的python工具包
==========================================================


=================================>>
=>==============================================>===============================`hello world``usage`
`interoperability``安装`|`项目结构`
`design principles``scripts``contribution``credits`
`more info``license`

introduction
----

**meza**是一个用于读取和处理表格数据的python`library`.
它有一个函数式编程风格的api,例如cels在读/写大文件时,
,可以处理10多种文件类型。


使用meza,您可以

-读取csv/xls/xlsx/mdb/dbf文件,等等!
-键入cast记录(日期、浮点、文本…
-处理uñic_text
-默认情况下惰性地传输文件
-以及更多…


要求
----


meza已经过测试,并且已知可用于python 2.7、3.5和3.6;
和pypypy2.7和3.5。

optional依赖项
^^^^^^^^^^^^^^^^^^^^^^^^


===================================================函数依赖项安装文件类型/扩展名===============================而这一点又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个,又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又一个又`html/html
``meza.convert.r"numpy `` numpy ```` numpy ``` numpy `` numpy `` numpy `` numpy `` numpy ``` numpy `` numpy `` n/a
``` meza.convert.records2df ``熊猫`` pan熊猫`` pip安装熊猫`` n/a
=========================================================================================一、二、二、三、三、三、三、四、四、四、四、四、四、四、四
[]如果不存在"lxml",则"read_html"将默认为内置python html读取器

。[]``records2array``可以在函数调用中传递``native=true``而不用``numpy``来使用。这将把"records"转换成原生的"array.array"对象列表。

我设计的**meza**是一款轻巧、易于安装、功能性较差的熊猫替代品。我还优化了**meza**以获得低内存使用率、pypy兼容性和函数式编程的最佳实践。

即:

-函数式编程(而不是面向对象的)api/>有关更多详细信息,请查看"常见问题解答"。

----


下面显示了一个简单的数据处理示例:

首先创建一个简单的csv文件(在bash中)

。代码块::bash



代码块::python

>;>from meza import io,process as pr,convert as cv
>;>from io import openrows
>;>row=下一行(记录)
>;>row
{col1':'hello','col2':'5/4/82','col3':'1'}

>;>;让我们替换第一行,以免丢失任何数据
>;>;records=pr.prepend(records,row)

注意:`detect_types`返回一个新的'records`
/>
现在键入cast the records。注意:大多数"meza.process"函数返回

剪切数据的第一列并合并行,以获得剩余列的最大值
。注意:由于"merge"(按定义)将始终
只包含一行,因此将按原样返回(不包含在生成器中)
>;>;cut-recs=pr.cut(casted,['col1',exclude=true)
>;>;merged=pr.merge(cut-recs,pred=bool,op=max)
>;merged
{'col2':datetime.date(2015,1,1),'col3':3}

f.read()
'col2,col3\n2015-01-01,3\n'


用法
----

meza打算直接用作python库。


-`用法索引
^^^^^^^^^^^^^^^^^
-`读取数据`-`处理数据`

+`数值分析(熊猫)``g(la csvkit)` `
+`地理处理(a la mapbox)` `

-`写入数据` `
-`食谱` `

>读取数据
^^^^^^^^^^^^^^^^^^^^^

meza可以读取文件路径和类似文件的对象。此外,所有读卡器都返回等价的"records"迭代器,即一个字典生成器,其
键对应于列名。代码块::python

>;>;从io import open,stringio
>;>;从meza import io


"读取文件路径"
>;>;records=io.read_json('path/to/file.json')

"读取类似于对象的文件并反复制头"
>;>;>;f=stringio('col,col\n hello,world\n')
>;>;records=io.读取csv(f,dedupe=true)


"查看第一行"
>;>;下一行(记录)
{col':'hello','col 2':'world'}

"读取在文本mod中打开的xls文件对象的第一页e."""
此外,还可以通过将头名称转换为小写来调整头名称,并将空白和无效字符替换为`.
>;>open('path/to/file.xls','utf-8')作为f:
…对于IO中的行,读取xls(f,sanitize=true):
…#对"row"做些什么
…传递

"读取以二进制模式打开的xlsx文件对象的第二张工作表"
注意:工作表是零索引的
>;>;>;以open('path/to/file.xlsx')作为f:
…记录=io.read_xls(f,encoding='utf-8',sheet=1)
…第一行=下一行(记录)
…#使用"第一行"

"读取任何可识别的文件"
>;>records=io.read('path/to/file.geojson')
>;>f.seek(0)
>;>records=io.read(f,ext='csv',dedupe=true)

有关可用性的完整列表,请参阅"readers"能够读取并识别
文件类型。

处理数据
^^^^^^^^^^^^^^


由`-->;``.

…代码块::python

>;>import itertools as it
>;>import random

>;>from io import stringio
>;>from meza import io,process as pr,convert as cv,stats

>>gt>gt;header=['a,'b,'c,'c,'d']
>>>gt;data=[(random.random()rand(random.random()range(4)in range(4)in range(7)x in range(7)的x in range(x in range(7)]
>;df=[dict(zip(header,d))for d in data]
>>>;df[0]>>gt;df[0]
>>>>;gt;df[0]
>>>>>>>>;df gt;df[0]
>>>>>>>>>>>>>>>>>""按列的值对记录排序`b `--gt;df.sort_值(按"b’’’’"排序)的下一个(pr.sort(df‘b’))
>>>gt>gt;下一个(pr.sort(df‘b’))
{'a':0.53520…,‘b’:0.06763…,‘c’:0.02351…,‘d’:0.80529…,‘d’:0.80529…,‘d’:0.80529…}


>gt;下一个(pr.cut(df 8170489952006}

"选择前三行数据-->;d""
>>gt;gt;gt;gt;lt;len(list(it.islice(d f,3))))
>3




>"选择"a"列值小于0.5的所有数据;df[df.a<;0.5]
>"
>>>gt;gt>gt;下一个(pr.tfilter(df,'a',lambda x:x<;0.5)
>{'a':0.21000…,'b':0.25727…,'b':0.25727.0.25727…,'b''b''0.25727.0.25727…,'0.25c':0.39719…,'d':0.64157…}

#注意:由于"aggregate"和"merge"(按定义)只返回一行,因此它们按原样返回(不包含在生成器中)。
"计算所有数据中列"a"的平均值-->;df.mean()['a']"
>;>;pr.aggregate(df,'a',stats.mean)['a'
0.5410437473067938

"计算ea的和"所有数据中的ch列-->;df.sum()"""
>>gt>gt>gt;pr.merge(df,pred=bool,op=sum)pr.merge(df,pred=bool,op=sum)
{'a':3.78730.78730…,'c':2.82875…,'b':3.14195…,'d':5.26330…}






>文本处理(a a a a a a a a a a a a a a a a a a a a a a a a a a a a 3.14195…,'b''b':3.14195…,'d''d''d'

在下面的示例中,``csvkit``等效命令前面加上`-->;``.

首先创建几个简单的csv文件(在bash中)

…代码块::bash

echo'col_1,col_2,col_3\n4,tom,male\n5,dick,male\n6,jill,female'>;file2.csv


另外,请注意,由于所有读卡器都返回等效的"records"迭代器,因此可以互换使用它们(在
中替换"read-csv"来打开任何受支持的文件。例如,``读xls`,
``读sqlite``等。代码块::python

>;>import itertools as it

>;>
{'col'1':'1','col'2':'dill','col'dill','col'3':'male'}
>>gt;下一步(it.islice(records,4,none))
{'col'1':'6','col'2':'jill','col'3':'female'}

现在,让我们创建一个持久记录列表
>>>;records=list(io.readu csv('file1.csv''file1.csv'))
>

"按列的值对记录排序"人们对2 `
>>;csv sort-c colu 2 colu 2 file1.csv 1.csv
"
>>>gt>gt>gt;下一步(公共排序(记录,c ol‘2’))
{'col‘1’:‘2’,‘col‘2’:‘bob’,‘col‘3’:‘男性’

>

>
>


>gt>gt;下一步(公共剪切(记录,['col'col‘2’:‘bob’,‘col‘col‘3’:‘男性’"




>>>>gt>gt>gt>2'])
{c ol_2':'dill'}

"全选"列"col庘2"的值包含"jan"
-->;csv grep-c col庘2-m jan file1.csv
"
>>>>next的数据(pr.grep(记录,[{'pattern':'jan'}],[col庘2'])
{'col'1':'3','col'2':'jane','col'3':'female'}


"将csv文件转换为json-->;csvjson-i 4 file1.csv"""
>;>;io.write('file.json',cv.records2json(records))

…f.read()
'[{"col-1":"1","col-2":"dill","col-3":"男性"},{"col-1":"2",
"col-2":"bob","col-3":"男性"},{"col-1":"3","col-2":"简",
"col-3":"女性"}'


地处理(即地图箱)地处理(即地图箱)地处理(即地图箱)地处理(即地图箱)地处理(即地图箱)地处理(br/>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ple,``mapbox``等价的命令前面有`-->;``。

代码块::bash

echo'{"type":"featurecollection","features":['>;file.geojson
echo'{"type":"feature","id":11,"geometry":{"type":"point","coordinates":[10,20]},"file.geojson
echo'{"type":"feature","id":12,"geometry":"type":"point,"c"ooordinates":[5,15]}}}">;>file.geojson

代码块::python

>;>;从meza导入io,处理为pr,转换为cv

,"lon":10,"id":11}

"按功能"id"拆分记录,然后选择第一个功能
--gt;geojsplit-k id file.geojson
"
>;>;splits=pr.split(记录,"id")
>;>;功能"记录,name=next(拆分)
>;>;name
11

"将要素记录转换为类似于geojson文件的对象"
>;>geojson=cv.recordsgeojson(要素记录)
>;>geojson.readline()
'{"类型":"要素集合","bbox":[10,20,10,20],"要素":"
'[{"类型":"要素"ure,"id":11,"geometry":{"type":"point",'
"coordinates":[10,20]},"properties":{"id":11}},"crs":{"type":"
""name","properties":{"name":"urn:ogc:def:crs:ogc:1.3:crs84"}"

注意:您也可以像前面所示写回文件
io.write("file.geojson",geojson)

对象,您可以通过
``meza.io.write('/path/to/file',result)``.

代码块::python

>;>from meza import io,convert a s cv
>;>from io import stringio,open

/>#下一步创建一个记录列表,以便我们可以重用它
>;>records=list(io.read_tsv(f))
>;<0]
{col1':'hello','col2':'world'}

>>>gt;cv.records2csv(records.readline()
"col1,col2\n"

"创建类似于对象的json文件"
>>>gt;cv.records2json(records.readline()
"[{"col1":"你好","col2":"世界"}"

"将csv写回文件路径"
>;>;io。写入('file.csv',cv.records2csv(records))
>;>;>;打开('file.csv','utf-8')作为f在:
…f_in.read()
"col1,col2\nhello,world\n"

"将json写回文件路径"
>;>io.write('file.json',cv.records2json(records))
>;gt;gt;打开('file.json','utf-8')作为f在:
…在readline()
'[{col1:"hello","col2:"world"}'


Cookbook
^^^^^^^^^^


请参阅"Cookbook"或ipython"Notebook"了解更多示例。

notes
^^^^

[]http://pandas.pydata.org/pandas docs/stable/10min.html min
[]https://csvkit.readthedocs.org/en/0.9.1/cli.html处理
…[]https://github.com/mapbox?utf8=%e2%9c%93&;query=geojson


互操作性
----




setup
^^^^^

代码块:python

另外,将记录转换为列表,以便我们可以重用它们。
>;>;记录=[{a':'one','b':2},{a':'five','b':10,'c':20.1}]
>;>;记录,结果=pr。检测记录类型(记录)
>;>;记录,类型=列表(记录),结果['types']>>>>从记录到熊猫,从数据帧到记录
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
{代码块::python

>;>;import pandas as pd
>;>;from meza import convert as cv

"将记录转换为数据帧"
>;>;df=cv.records2df(记录,类型)
>;>;df
a b c
0 one 2nan
1 5 10 20.1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

…代码块::python

>;>import numpy as np

>;>from array import array
>;>from meza import convert as cv

"将记录转换为结构化数组"
>;>recarray=cv.records2array(记录、类型)
>>>重新排列
rec.array([('one',2,nan),('five',10,20.100000381469727)],
dtype=[('a','o'),('b','<;i4'),('c','<;f4')))
>;>;重新排列.b
array([2,10],dtype=int32)

"将记录转换为本机数组"
>t;>narray=cv.records2array(records,types,native=true)
>;>narray
[[array('u','a'),array('u','b'),array('u','c'),
[array('u','one'),array('u','five'),
array('i',[2,10]),
array('f',[0.0,20.100000381469727])]将二维numpy数组转换为记录生成器"
>;>;data=np.array([[1,2,3],[4,5,6]],np.int32)
>;>;data
array([[1,2,3],
[4,5,6]],dtype=int32)
>;>;next(cv.array2records(data))
{'column_1,'column_2,'列"3":3}

"将结构化数组转换回记录生成器"
>;>next(cv.array2records(recarray))
{a':"one","b":2,"c":nan}

"将本机数组转换回记录生成器"
>;>next(cv.array2records(narray,native=true))
{'a':'one','b':2,'c':0.0}


安装
----

(您使用的是"virtualenv",对吧?)

在命令行中,使用``pip`(推荐*)

代码块::bash


或"轻松安装"`

…代码块::bash


easy_install meza


有关详细信息,请参阅"安装文档"。


代码块::bash

许可证
——清单.in
——makefile
——自述文件.rst
——数据
一人们/*
/>对企业进行管理。py
对企业进行管理;py
对企业进行管理;py
对企业进行管理;py
对企业进行转型;py
对企业进行转型;py
对企业进行转型;py
;py
;py
;py
;py
;py
;py
;py
对企业进行管理;py
对企业进行管理;py
;对企业进行管理;py-Stats.py
—初始Py
-提供足够的开箱即用的功能,以便轻松实现最常见的数据分析用例
-在"记录"、"数组"和"数据帧"之间进行转换非常简单
-只要可能,就懒洋洋地读取对象并将结果进行流式处理[35;]

。[]值得注意的例外是``meza.process.group````meza.process.sort````meza.io.read_dbf````meza.io.read_yaml````,和``meza.io.read_html``。这些函数预先将所有内容读入内存。

代码块::bash

pip install-r dev requirements.txt


>示例
^^^^^^^^^^^

*运行python linter和nose测试*

…代码块::bash


manage lint


contribution
----

请模拟此repo中使用的编码样式/约定。
如果添加新类或函数,请使用
示例添加相应的文档块。另外,还要确保蟒蛇的皮棉和鼻子测试通过。

请参阅"贡献文档"了解更多详细信息。


credits
----


Book`\u
-ipython`Notebook`\u

license
----



| travis图像::https://img.shields.io/travis/reubano/meza/master.svg
:目标:https://travis ci.org/reubano/meza

……|版本image::https://img.shields.io/pypi/pyversions/meza.svg
:目标:https://pypi.python.org/pypi/meza

| pypi图像::https://img.shields.io/pypi/v/meza.svg
:目标:https://pypi.python.org/pypi/meza

_ mdbtools:http://sourceforge.net/projects/mdbtools/
。_ lxml:http://www.crummy.com/software/beautifulsoup/bs4/doc/installing-a-parser
。_库:用法
…_ numpy:https://github.com/numpy/numpy
。_ pypy:https://github.com/pydata/pandas/issues/9532
。_走进公园:http://pandas.pydata.org/pandas docs/stable/install.html用水蟒安装pandas
。_ csvkit:https://github.com/onyxfish/csvkit
。_消息表:https://github.com/okfn/messytables
…_熊猫:https://github.com/pydata/pandas
…_麻省理工学院许可证:http://opensource.org/licenses/mit
…_ virtualenv:http://www.virtualenv.org/en/latest/index.html
。_贡献文档:https://github.com/reubano/meza/blob/master/contribution.rst
…_常见问题解答:https://github.com/reubano/meza/blob/master/docs/faq.rst
…_默认迭代器:https://github.com/reubano/meza/blob/master/docs/faq.rst memory
。_ Pypy兼容性:https://github.com/reubano/meza/blob/master/docs/faq.rst#PyPy<Br/>_ GeoJSON支持:https://github.com/reubano/meza/blob/master/docs/faq.rst GeoJSON
…_无缝集成:https://github.com/reubano/meza/blob/master/docs/faq.rst方便
…_笔记本:http://nbviewer.jupyter.org/github/reubano/meza/blob/master/examples/usage.ipynb
。_读者:https://github.com/reubano/meza/blob/master/docs/faq.rst提供哪些读者
…_安装文档:https://github.com/reubano/meza/blob/master/docs/installation.rst
。_食谱:https://github.com/reubano/meza/blob/master/docs/cookbook.rst



==
changelog
==




变更日志::
:版本:dev
:发布:正在进行

…更改::
:标记:文档

更新的更改。

…变更日志::
:版本:0.1.0
:发布日期:2015-12-05


…更改::
:标记:docs

pypi上的第一个版本。

…TOdo::vim:set filetype=rst:



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无法在Java Android中比较字符串   java Month二月在下面的程序中被解析为'33'。如何修复?   用于在方法调用中显式指定泛型参数的Javasyntax   java 安卓。操作系统。NetworkOnMainThread尝试与jsoup 安卓连接时出现异常   java Spring引导找不到jsp视图   java如何访问注释中的属性值?   反射我可以使用isAssignableFrom检查C1是Java中C2的子类型吗?   java如何在selenium中从HTTP服务器传递图像URL   java导入失败。hibernate中的sql   Java中的“断开”while循环   java如何向Spark数据集添加映射列?   java应该在中部署消息驱动bean。耳文件?   java为何如此悲观。在springboot JPA中写入不起作用?   web服务如何在Java中高效地管理文件系统上的文件?   Java验证日期条目   java错误:在AWS RDS上找不到适合数据库的驱动程序   java如何将OBJ文件面定义传递给openGL