小编mar*_*ion的帖子

Pandas中map,applymap和apply方法之间的区别

你能告诉我什么时候使用这些矢量化方法和基本的例子吗?

我看到这map是一种Series方法,而其余的是DataFrame方法.我对此感到困惑applyapplymap方法.为什么我们有两种方法将函数应用于DataFrame?再一次,说明用法的简单例子会很棒!

python vectorization dataframe pandas

409
推荐指数
9
解决办法
26万
查看次数

在VBA中使用自定义数据类型

我试图在VBA for Excel中创建自定义数据类型.我们称这种数据为"卡车".每辆卡车都具有以下属性:

NumberOfAxles (this is an integer)
AxleWeights (this is an array of doubles)
AxleSpacings (this is an array of doubles)
Run Code Online (Sandbox Code Playgroud)

我可以创建数据类型"truck"(卡车(1),卡车(2)......等)的许多实例,并将上面列出的属性读/写到该实例中吗?

例:

Truck(1).NumberOfAxles = 2
Truck(1).AxleWeights(1) = 15.0
Truck(1).AxleWeights(2) = 30.0
Truck(1).AxleSpacings(1) = 8.0

Truck(2).NumberOfAxles = 3
Truck(2).AxleWeights(1) = 8.0
Truck(2).AxleWeights(2) = 10.0
Truck(2).AxleWeights(3) = 12.0
Truck(2).AxleSpacings(1) = 20.0
Truck(2).AxleSpacings(2) = 4.0
Run Code Online (Sandbox Code Playgroud)

等等.上面的语法很可能是错误的,我只想展示我需要提出的结构.

我试图将数据写入数据结构并在必要时调用它,例如

Truck(i).NumberOfAxles
Truck(i).AxleWeights(j)
Truck(i).AxleSpacings(j)
Run Code Online (Sandbox Code Playgroud)

非常感谢你!

excel vba types class excel-vba

45
推荐指数
2
解决办法
13万
查看次数

Seaborn:带有频率的countplot()

我有一个带有名为"AXLES"的列的Pandas DataFrame,它可以取3-12之间的整数值.我试图使用Seaborn的countplot()选项来实现以下情节:

  1. 左侧y轴显示数据中出现的这些值的频率.轴延伸为[0%-100%],每10%刻度线.
  2. 右y轴显示实际计数,值对应于由左y轴确定的刻度标记(每10%标记一次).
  3. x轴显示条形图的类别[3,4,5,6,7,8,9,10,11,12].
  4. 条形顶部的注释显示该类别的实际百分比.

下面的代码给出了下面的图表,其中包含实际计数,但我找不到将它们转换为频率的方法.我可以使用频率,df.AXLES.value_counts()/len(df.index)但我不知道如何将这些信息插入Seaborn countplot().

我还找到了注释的解决方法,但我不确定这是否是最佳实现.

任何帮助,将不胜感激!

谢谢

plt.figure(figsize=(12,8))
ax = sns.countplot(x="AXLES", data=dfWIM, order=[3,4,5,6,7,8,9,10,11,12])
plt.title('Distribution of Truck Configurations')
plt.xlabel('Number of Axles')
plt.ylabel('Frequency [%]')

for p in ax.patches:
        ax.annotate('%{:.1f}'.format(p.get_height()), (p.get_x()+0.1, p.get_height()+50))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑:

我使用以下代码更接近我需要的东西,使用Pandas的条形图,抛弃Seaborn.感觉就像我使用了很多变通方法,并且必须有一种更简单的方法来实现它.这种方法的问题:

  • orderPandas的条形图功能中没有关键字,因为Seaborn的countplot()有,所以我不能像在countplot()中那样绘制3-12中的所有类别.即使该类别中没有数据,我也需要显示它们.
  • 由于某种原因,辅助y轴会使条形和注释混乱(请参阅在文本和条形图上绘制的白色网格线).

    plt.figure(figsize=(12,8))
    plt.title('Distribution of Truck Configurations')
    plt.xlabel('Number of Axles')
    plt.ylabel('Frequency [%]')
    
    ax = (dfWIM.AXLES.value_counts()/len(df)*100).sort_index().plot(kind="bar", rot=0)
    ax.set_yticks(np.arange(0, 110, 10))
    
    ax2 = ax.twinx()
    ax2.set_yticks(np.arange(0, 110, 10)*len(df)/100)
    
    for p in ax.patches:
        ax.annotate('{:.2f}%'.format(p.get_height()), (p.get_x()+0.15, p.get_height()+1))
    
    Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

python data-visualization matplotlib pandas seaborn

26
推荐指数
3
解决办法
4万
查看次数

使用Python解析文本文件

我试图解析一系列文本文件,并使用Python(2.7.3)将它们保存为CSV文件.所有文本文件都有一个4行长的标题,需要将其删除.数据行有各种分隔符,包括"(引用), - (破折号),"列和空格.我发现在C++中使用所有这些不同的分隔符对其进行编码很难,所以我决定在Python中试用它与C/C++相比,相对容易做到.

我编写了一段代码来测试它的单行数据并且它可以工作,但是,我无法使其适用于实际文件.为了解析单行,我使用了文本对象和"替换"方法.看起来我当前的实现将文本文件作为列表读取,并且列表对象没有替换方法.

作为Python的新手,我在这一点上陷入困​​境.任何输入将不胜感激!

谢谢!

# function for parsing the data
def data_parser(text, dic):
for i, j in dic.iteritems():
    text = text.replace(i,j)
return text

# open input/output files

inputfile = open('test.dat')
outputfile = open('test.csv', 'w')

my_text = inputfile.readlines()[4:] #reads to whole text file, skipping first 4 lines


# sample text string, just for demonstration to let you know how the data looks like
# my_text = '"2012-06-23 03:09:13.23",4323584,-1.911224,-0.4657288,-0.1166382,-0.24823,0.256485,"NAN",-0.3489428,-0.130449,-0.2440527,-0.2942413,0.04944348,0.4337797,-1.105218,-1.201882,-0.5962594,-0.586636'

# dictionary definition 0-, 1- etc. are there to parse the …
Run Code Online (Sandbox Code Playgroud)

python file-io parsing text python-2.7

15
推荐指数
2
解决办法
19万
查看次数

Pandas计算每列中元素的数量小于x

我有一个DataFrame,如下所示.我试图计算每列中小于2.0的元素数量,然后我将在条形图中可视化结果.我是使用列表和循环完成的,但我想知道是否有"熊猫方式"可以快速完成.谢谢!

x = []
for i in range(6):
    x.append(df[df.ix[:,i]<2.0].count()[i])
Run Code Online (Sandbox Code Playgroud)

然后我可以使用列表获得一个条形图x.

          A          B          C          D          E          F 
0       2.142      1.929      1.674      1.547      3.395      2.382  
1       2.077      1.871      1.614      1.491      3.110      2.288  
2       2.098      1.889      1.610      1.487      3.020      2.262    
3       1.990      1.760      1.479      1.366      2.496      2.128    
4       1.935      1.765      1.656      1.530      2.786      2.433
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas

15
推荐指数
1
解决办法
3万
查看次数

Matplotlib imshow/matshow在图上显示值

我正在尝试使用Matplotlib中的任何一个imshowmatshow在Matplotlib中创建10x10网格.下面的函数将numpy数组作为输入,并绘制网格.但是,我希望数组中的值也显示在网格定义的单元格内.到目前为止,我找不到合适的方法来做到这一点.我可以plt.text用来将东西放在网格上,但这需要每个单元格的坐标,完全不方便.有没有更好的方法来做我想要完成的事情?

谢谢!

注意:下面的代码还没有从数组中获取值,我只是在玩plt.text.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors

board = np.zeros((10, 10))

def visBoard(board):
   cmap = colors.ListedColormap(['white', 'red'])
   bounds=[0,0.5,1]
   norm = colors.BoundaryNorm(bounds, cmap.N)
   plt.figure(figsize=(4,4))
   plt.matshow(board, cmap=cmap, norm=norm, interpolation='none', vmin=0, vmax=1)
   plt.xticks(np.arange(0.5,10.5), [])
   plt.yticks(np.arange(0.5,10.5), [])
   plt.text(-0.1, 0.2, 'x')
   plt.text(0.9, 0.2, 'o')
   plt.text(1.9, 0.2, 'x')
   plt.grid()

   visBoard(board)
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

python visualization numpy matplotlib

14
推荐指数
1
解决办法
2万
查看次数

删除除表单控件之外的Excel工作表中的所有形状

我有一个excel工作表,其中绑定到按钮的宏根据工作表中的用户输入参数绘制动态形状.

我正在尝试编写一个新宏来清理工作表,换句话说,删除工作表中的所有形状.

我尝试使用下面的代码,它确实删除了所有形状,但是按钮形式控件也会在此过程中被删除.有没有一种简单的方法可以摆脱工作表中的形状(箭头,文本框,椭圆等)?谢谢你!

Sub DeleteAllShapes()

Dim Shp As Shape

For Each Shp In ActiveSheet.Shapes
    Shp.Delete
Next Shp

End Sub
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

13
推荐指数
1
解决办法
6万
查看次数

嵌套(双)逐行迭代Pandas DataFrame

您好我正在尝试找到迭代问题的矢量化(或更有效)解决方案,其中我发现的唯一解决方案需要逐行迭代具有多个循环的DataFrame.实际的数据文件是巨大的,所以我目前的解决方案实际上是不可行的.如果你想看一下,我在最后包括了行分析器输出.真正的问题非常复杂,所以我将尝试用一个简单的例子来解释这个问题(花了我一段时间来简化它:)):

假设我们有一个机场有两个并排的着陆带.每架飞机降落(到达时间),在其中一个着陆带上停放一段时间,然后起飞(起飞时间).所有内容都存储在Pandas DataFrame中,按照到达时间进行排序,如下所示(有关更大的测试数据集,请参阅EDIT2):

PLANE   STRIP   ARRIVAL   DEPARTURE
0       1       85.00     86.00
1       1       87.87     92.76
2       2       88.34     89.72
3       1       88.92     90.88
4       2       90.03     92.77
5       2       90.27     91.95
6       2       92.42     93.58
7       2       94.42     95.58
Run Code Online (Sandbox Code Playgroud)

寻找两种情况的解决方案:

1.构建一个事件列表,其中一次在一个条带上存在多个平面.不包括事件子集(例如,如果存在有效的[3,4,5]情况,则不显示[3,4]).该列表应存储实际DataFrame行的索引.有关此案例的解决方案,请参阅函数findSingleEvents()(运行大约5 ms).

2.建立一个事件列表,每次在每个条带上至少有一个平面.不计算事件的子集,仅记录具有最大平面数的事件.(例如,如果有[3,4,5]个案,则不显示[3,4]).不要计算单个条带上完全发生的事件.该列表应存储实际DataFrame行的索引.有关此案例的解决方案,请参阅函数findMultiEvents()(运行大约15 ms).

工作守则:

import numpy as np
import pandas as pd
import itertools
from __future__ import division

data =  [{'PLANE':0, 'STRIP':1, 'ARRIVAL':85.00, 'DEPARTURE':86.00},
         {'PLANE':1, 'STRIP':1, 'ARRIVAL':87.87, 'DEPARTURE':92.76},
         {'PLANE':2, 'STRIP':2, 'ARRIVAL':88.34, 'DEPARTURE':89.72},
         {'PLANE':3, 'STRIP':1, 'ARRIVAL':88.92, …
Run Code Online (Sandbox Code Playgroud)

python loops vectorization dataframe pandas

11
推荐指数
1
解决办法
2080
查看次数

使用Python进行蒙特卡罗模拟:动态构建直方图

我有一个关于使用Python动态构建直方图的概念性问题.我想弄清楚是否有一个好的算法或可能是现有的包.

我编写了一个运行蒙特卡罗模拟的函数,调用1,000,000,000次,并在每次运行结束时返回64位浮点数.以下是上述功能:

def MonteCarlo(df,head,span):
    # Pick initial truck
    rnd_truck = np.random.randint(0,len(df))
    full_length = df['length'][rnd_truck]
    full_weight = df['gvw'][rnd_truck]

    # Loop using other random trucks until the bridge is full
    while True:
        rnd_truck = np.random.randint(0,len(df))
        full_length += head + df['length'][rnd_truck]
        if full_length > span:
            break
        else:
            full_weight += df['gvw'][rnd_truck]

    # Return average weight per feet on the bridge
    return(full_weight/span)
Run Code Online (Sandbox Code Playgroud)

df是一个Pandas数据帧对象,其列标记为'length''gvw',分别是卡车长度和重量.head是两个连续卡车之间的距离,span是桥长.只要卡车列车的总长度小于桥梁长度,该功能就会随意将卡车放在桥上.最后,计算每英尺桥上存在的卡车的平均重量(桥上存在的总重量除以桥长度).

因此,我想构建一个表格直方图,显示返回值的分布,可以在以后绘制.我有一些想法:

  1. 继续在numpy向量中收集返回的值,然后在MonteCarlo分析完成后使用现有的直方图函数.这是不可行的,因为如果我的计算是正确的,我只需要7.5 GB的内存(1,000,000,000 64位浮点数~7.5 GB)

  2. 初始化具有给定范围和数量的bin的numpy数组.每次运行结束时,将匹配区域中的项目数增加1.问题是,我不知道我会得到的价值范围.设置具有范围和适当的箱尺寸的直方图是未知的.我还必须弄清楚如何将值分配给正确的箱子,但我认为它是可行的.

  3. 以某种方式做它在飞行中.每次函数返回一个数字时,修改范围和bin大小.我认为这从头开始写起来太棘手了.

好吧,我打赌可能有更好的方法来处理这个问题.任何想法都会受到欢迎!

在第二个注释中,我测试运行上述函数1,000,000,000次只是为了获得计算的最大值(下面的代码片段).这需要大约一个小时的时间span = 200.如果我运行更长的跨度,计算时间会增加(while循环运行时间越长,用卡车填充桥).你认为有没有办法优化这个? …

python numpy histogram montecarlo pandas

10
推荐指数
1
解决办法
1万
查看次数

过滤数据帧的熊猫直方图

这让我在最后一小时疯了.我可以在使用时绘制直方图:

hist(df.GVW, bins=50, range=(0,200))
Run Code Online (Sandbox Code Playgroud)

当我需要在其中一列中过滤给定条件的数据帧时,我使用以下内容,例如:

df[df.TYPE=='SU4']
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常.当我试图得到这个过滤数据的直方图时,我得到一个关键错误:KeyError: 0L.我将以下内容用于过滤数据的直方图:

hist(df[df.TYPE=='SU4'].GVW, bins=50, range=(0,200))
Run Code Online (Sandbox Code Playgroud)

某处有语法错误吗?谢谢您的帮助!

python matplotlib histogram pandas

8
推荐指数
1
解决办法
5418
查看次数