python 语法小进阶1

2023-05-16

1、filter 是通过生成 True 和 False 组成的迭代器将可迭代对象中不符合条件的元素过滤掉;而 map 返回的则是 True 和 False 组成的迭代器。

>>> res1 = map(lambda n: n > 5, range(10))
>>> lt1 = list(res1)
>>> print(lt1)
[False, False, False, False, False, False, True, True, True, True]

>>> res2 = filter(lambda n: n > 5, range(10))
>>> lt = list(res2)
>>> print(lt) 
[6, 7, 8, 9]

map和filter都是迭代器,用一次就没了!小心之前用print函数直接把他用没了。

2、 用lamda表达式和map函数对数据进行整理。

原来的数据为:

ace 
bd  
bc  
abcd
ab  
bc  
ab  
abce
abc 
ace 

 

#使用Apriori算法挖掘菜品订单关联规则
from __future__ import print_function
import pandas as pd
# from apriori import * #导入自行编写的apriori函数

inputfile = '../data/menu_orders.xls'
outputfile = '../tmp/apriori_rules.xls' #结果文件
data = pd.read_excel(inputfile, header = None)
print(type(data))
print(u'\n转换原始数据至0-1矩阵...')
ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换0-1矩阵的过渡函数
b = map(ct, data.as_matrix()) #用map方式执行
# print(list(b))
# print(pd.DataFrame(list(b)))
data = pd.DataFrame(list(b)).fillna(0) #实现矩阵转换,空值用0填充
print(list(b))
print(data)
print(u'\n转换完毕。')

map函数产生的b是迭代器,只能够用一次!如果之前用b做了相关操作,再去用data=xxxxbxxxx的处理代码,那么data将变为一个空矩阵。 

下面解释一下lamda表达式,lamda x,一开始这个x是输入x为变量。

之后那个pd.Series(1, index = x[pd.notnull(x)])是返回值(lamda相当于匿名函数)

data.as_matrix()是把dataframe类型转换为ndarray类型,也就是矩阵类型,我们来看看有什么区别:

print(data)输出如下
   0  1    2    3
0  a  c    e  NaN
1  b  d  NaN  NaN
2  b  c  NaN  NaN
3  a  b    c    d
4  a  b  NaN  NaN
5  b  c  NaN  NaN
6  a  b  NaN  NaN
7  a  b    c    e
8  a  b    c  NaN
9  a  c    e  NaN


print(data.as_matrix())输出如下
[['a' 'c' 'e' nan]
 ['b' 'd' nan nan]
 ['b' 'c' nan nan]
 ['a' 'b' 'c' 'd']
 ['a' 'b' nan nan]
 ['b' 'c' nan nan]
 ['a' 'b' nan nan]
 ['a' 'b' 'c' 'e']
 ['a' 'b' 'c' nan]
 ['a' 'c' 'e' nan]]


print(pd.DataFrame(list(b)))输出如下
     a    c    e    b    d
0  1.0  1.0  1.0  NaN  NaN
1  NaN  NaN  NaN  1.0  1.0
2  NaN  1.0  NaN  1.0  NaN
3  1.0  1.0  NaN  1.0  1.0
4  1.0  NaN  NaN  1.0  NaN
5  NaN  1.0  NaN  1.0  NaN
6  1.0  NaN  NaN  1.0  NaN
7  1.0  1.0  1.0  1.0  NaN
8  1.0  1.0  NaN  1.0  NaN
9  1.0  1.0  1.0  NaN  NaN

可以看到,dataframe不是列表,ndarray是一个以行为单位的列表对象,是一个可以迭代的对象,这样才能成为我们map函数的作用目标,所以,如果我们把map中的as_matrix去掉就会报错。 

ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换0-1矩阵的过渡函数
b = map(ct, data.as_matrix()) #用map方式执行

这两行到底什么意思呢?Series是一个类似于字典的类,Series的第一个参数可以是字典也可以是数组,也可以是值,第二个参数就是index,也就是字典中键,就是什么键,对应前面输入的什么值,个数要一样对应,如果键的个数比值的个数多,是不是后面的键赋值为None?如果值的个数比键的个数多,是不是会报错?这里笔者没有尝试,有兴趣朋友可以查一查。

pd.notnull(x)就会输出一个dataframe,如下

a=[['a','b','a','c',None],['b','b','c']]
a=pd.DataFrame(a)
print(pd.notnull(a))


      0     1     2      3      4
0  True  True  True   True  False
1  True  True  True  False  False
值得一提的是:如果当一个矩阵的整体去用,是没有意义的,必须提取出来一行行或者一列列去用。
还有一点,a[3]其实指的是dataframe a 的第四列。不是第四行
print(a[pd.notnull(a)])
print(a[3][pd.notnull(a[3])])
   0  1  2    3    4
0  a  b  a    c  NaN
1  b  b  c  NaN  NaN



0    c
Name: 3, dtype: object

 ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换0-1矩阵的过渡函数
b = map(ct, data.as_matrix()) #用map方式执行

这里,data.as_matrix()每次把一行数据传入,lamda表达式,作为x,然后提取出这一行不为空值的字符作为键,每一个键对应的值都赋值1,相当于第一行为a:1,c:1,e:1,第二行b:1,d:1,然后最重要的是,用map把每一行得到的Series合并起来,最终生成了一个有空缺值的dataframe,(输出在之前),最后再进行填0操作。

data = pd.DataFrame(list(b)).fillna(0) #实现矩阵转换,空值用0填充,输出如下
print(data)
     a    c    e    b    d
0  1.0  1.0  1.0  0.0  0.0
1  0.0  0.0  0.0  1.0  1.0
2  0.0  1.0  0.0  1.0  0.0
3  1.0  1.0  0.0  1.0  1.0
4  1.0  0.0  0.0  1.0  0.0
5  0.0  1.0  0.0  1.0  0.0
6  1.0  0.0  0.0  1.0  0.0
7  1.0  1.0  1.0  1.0  0.0
8  1.0  1.0  0.0  1.0  0.0
9  1.0  1.0  1.0  0.0  0.0

 

3、DEBUG 打断点 view as dataframe (在下面变量栏,变量名的最右边)可以很方便地看数据的状态。

所以多用dataframe,比较方便

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 语法小进阶1 的相关文章

  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar

随机推荐