你能告诉我什么时候使用这些矢量化方法和基本的例子吗?
我看到这map是一种Series方法,而其余的是DataFrame方法.我对此感到困惑apply和applymap方法.为什么我们有两种方法将函数应用于DataFrame?再一次,说明用法的简单例子会很棒!
我试图在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)
非常感谢你!
我有一个带有名为"AXLES"的列的Pandas DataFrame,它可以取3-12之间的整数值.我试图使用Seaborn的countplot()选项来实现以下情节:
下面的代码给出了下面的图表,其中包含实际计数,但我找不到将它们转换为频率的方法.我可以使用频率,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(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) 我有一个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) 我正在尝试使用Matplotlib中的任何一个imshow或matshow在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)
输出:

我有一个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) 您好我正在尝试找到迭代问题的矢量化(或更有效)解决方案,其中我发现的唯一解决方案需要逐行迭代具有多个循环的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动态构建直方图的概念性问题.我想弄清楚是否有一个好的算法或可能是现有的包.
我编写了一个运行蒙特卡罗模拟的函数,调用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是桥长.只要卡车列车的总长度小于桥梁长度,该功能就会随意将卡车放在桥上.最后,计算每英尺桥上存在的卡车的平均重量(桥上存在的总重量除以桥长度).
因此,我想构建一个表格直方图,显示返回值的分布,可以在以后绘制.我有一些想法:
继续在numpy向量中收集返回的值,然后在MonteCarlo分析完成后使用现有的直方图函数.这是不可行的,因为如果我的计算是正确的,我只需要7.5 GB的内存(1,000,000,000 64位浮点数~7.5 GB)
初始化具有给定范围和数量的bin的numpy数组.每次运行结束时,将匹配区域中的项目数增加1.问题是,我不知道我会得到的价值范围.设置具有范围和适当的箱尺寸的直方图是未知的.我还必须弄清楚如何将值分配给正确的箱子,但我认为它是可行的.
以某种方式做它在飞行中.每次函数返回一个数字时,修改范围和bin大小.我认为这从头开始写起来太棘手了.
好吧,我打赌可能有更好的方法来处理这个问题.任何想法都会受到欢迎!
在第二个注释中,我测试运行上述函数1,000,000,000次只是为了获得计算的最大值(下面的代码片段).这需要大约一个小时的时间span = 200.如果我运行更长的跨度,计算时间会增加(while循环运行时间越长,用卡车填充桥).你认为有没有办法优化这个? …
这让我在最后一小时疯了.我可以在使用时绘制直方图:
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)
某处有语法错误吗?谢谢您的帮助!