熊猫地图员

pandas-mapper的Python项目详细描述


#pandas mapper

pandas mapper是一个python包,它提供了一个简明的语法
,用于将映射转换应用到
[pandas](http://pandas.pydata.org/)etl工作流通常需要的数据帧。使用pandas mapper
可能比本机
[pandas.dataframe.apply](http://pandas.pydata.org/pandas docs/version/0.22/generated/pandas.dataframe.apply.html)方法最大的好处是它是一种健壮的错误处理机制。映射错误不会引发
错误,而是可以重定向到错误数据帧,然后用户可以根据需要处理该数据帧。



```

,然后通过导入包将其用于您的项目

````
import pandas_mapper
```

在项目中导入此包时,它会将"mapping"方法添加到pandas dataframe
对象中。假设您有一个包含整数的数据帧和整数的英文单词
,并且希望将名称转换为西班牙语。

``python
import pandas as pd
import pandas_mapper

df=pd.dataframe(
{
'num':[1,2,3],
'name':['one'"两个"、"三个"],
'num'u-name':['1-one'、'2-2'、'3-3']





`` `





3 3 3-3




关联方法可能是

`` python
def translate(val):
如果val==1:
返回'uno'
elif val==2:
返回'dos'
elif val==3:
返回'tres'
否则:
引发值错误('未知转换:{}'。格式(val))
```

可以使用pandas mapper通过

``python
mapper=df.mapping([('num','translated',translate])
translated_df=mapper.mapped
````

mapping方法的第一个参数是元组列表,其中
tup的第一个元素le是源列,第二个元素
是目标列,第三个元素(可选)是
转换。在这个例子中,我们在列表中只有一个映射,因此结果是
一个只有一列的数据帧:

如果我们为它提供数字"4",则会出错。假设
我们在上面定义的"df"中添加了另一条编号为"4"的记录。如果我们应用与上面相同的
映射,pandas mapper将引发一个"valueerror"。但是,如果我们通过

````
mapper=df.mapping([('num','translated',translate]),为'mapping`
方法提供'on廑error='redirect'选项,则会得到两个dataframes,一个带有翻译记录(`mapper.mapped`):

__|
----
4 4-4{msg':'值错误(4):未知翻译:4…|



转换函数的预期参数和返回值取决于使用的源列和目标列的数量。

*如果映射具有单个源列和单个目标列,则ansform函数应接受单个值并返回单个值。
*如果映射涉及多个源列,则
函数应接受一个类似dict的对象,其中
键是源列的名称。在这种情况下,如果映射
只有一个目标,那么transform函数的retun值应该包含
一个值。但是,如果映射有多个目标,则返回的
值应与传递给函数的dict-like对象相同,并且
该对象的目标列键已由函数修改到位。
*如果映射没有源列,则转换可以是常量
(例如,整数5),也可以是不接受参数但返回值
(如果要使用随机数生成器,这可能很有用)的函数。

常量:

``` python
df.mapping([none,'five',transform=5])
``````

>或由生成输出的函数定义:

`` python
`` import random
df.mapping([(none,'rando',random.random])。mapped
````

上面的fined是一个一对一转换的示例:

``python
df.mapping([('num','translated',translate])
``````

``python
``python
df.mapping([(['num','name','num name',lambda row:'-'.join(row.apply(str)))])
````

一对多操作需要与多对多操作相同的方法签名:

``python
def deconcatenate(row):
split_values=row['num_name'].split('-')
row[num']=split_values[0]
row[name']=split_values[1]
return row

df mapping([('num_name',['num','name'],deconnectate])
```



其他选项

映射方法还支持"inplace"选项,默认为"false"。这个
将在适当的位置修改数据帧,并带上它开始使用的所有列。例如:

``python
df.mapping([('num','translate','translate,translate),inplace=true)映射
```




-2个门
|3 three 3-three

版本](https://www.docker.com/)
适合您的主机操作系统。


我们使用[调用](http://www.pyinvoke.org/)来设置和控制用于开发和测试此项目的环境。这将要求您在主机操作系统中安装
invoke。您可能只需运行
"pip install invoke"就可以了。但是,推荐的方法是下载并安装
[miniconda](https://conda.io/miniconda.html)。然后,创建一个特定于项目的
环境并在此环境中安装invoke:

````
conda create--命名pandas mapper python=3.6
source activate pandas mapper
pip install invoke
```

**注意**:如果使用miniconda,则必须运行'source activate pandas-mapper`
每次启动新的终端会话时。

invoke一旦安装,就可以构建docker容器来使用开发/测试环境

````
inv build
`````


通过

```
inv test
运行测试套件```

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

推荐PyPI第三方库


热门话题
使用jaxb2annotateplugin和XJC工具的java自定义注释   java组织。xeustechnologies。jcl无法加载WstxInputFactory类   java JUnit在格式化字符串上比较失败   java Bukkit配置部分getKeys   如何关闭Java流?   java Struts2正则表达式配置   链式事务注释的java奇怪行为   java在两个JButton之间使用变量   java签署APK时内容会发生什么变化?   java LWJGL:Slick:3D世界中的绘图字体   如何分解Java数组?   在Java MySql中处理多个过滤器   java如何在Firebase数据库中跳过初始OnChildaded事件触发   java如何在PreviewView中使用CameraX?   在子类#中重写父类后访问父类原始方法的java已解决   java找不到类型的属性   游戏框架游戏!框架+Java