小编unu*_*tbu的帖子

python时间字符串与格式不匹配

def deadlines(t):
    '''shows pretty time to deadlines'''
    fmt = '%a %d %m %Y %I:%M %p %Z' 

    dt = datetime.strptime( t , fmt )

    print 'dt ', repr(dt)


first = 'Sun 11 May 2014 05:00 PM PDT'
deadlines(first)
Run Code Online (Sandbox Code Playgroud)

ValueError:时间数据'Sun 11 May 2014 02:00 PM PDT'与格式'%a%d%m%Y%I:%M%p%Z'不匹配

这有什么不对吗?

python string datetime date-parsing

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

numpy中的三张量产品

我正在将一些代码从C转换为numpy,这个特定的代码段显示出一些显着的减速.似乎只是用numpy数组中的和来替换内部循环是不够的.有没有人建议恢复一些原始性能?

我宁愿避免使用scipy.weave.我想知道我是否能以某种方式使用卷积函数,但文档有点薄,并且似乎有几个选项(scipy.signal,ndimage,numpy.convolve等).是否可以使用爱因斯坦求和函数(einsum)或tensordot?对于tensordot我认为我需要分别做X,Y,Z?

我已经将这些值设置为随机,因此可以剪切和粘贴,但我应该注意MX,MY和MZ的某些结构M(i,j)|i-j|M(i,j)=M(j,i)

一般来说,回应一些建议的编辑 n[0] != n[1] != n[2]

n = np.array((50,50,50))
np.random.seed(1)
A = np.random.random(n)
C = np.zeros_like(A)
MX = np.random.random((n[0],n[0]))
MY = np.random.random((n[1],n[1]))
MZ = np.random.random((n[2],n[2]))

for i in xrange(n[0]):
    for j in xrange(n[1]):
        for k in xrange(n[2]):
            C[i,j,k]=(MX[i,:]*A[:,j,k]).sum() + (MY[j,:]*A[i,:,k]).sum() +(MZ[k,:]*A[i,j,:]).sum()
Run Code Online (Sandbox Code Playgroud)

python arrays hpc numpy

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

Python Pandas to_dict 函数

我\xe2\x80\x99m 尝试创建一个字典,但是\xe2\x80\x99t 不能让它按照我想要的方式工作。我感觉我\xe2\x80\x99m 如此接近。我的 yelp 数据:

\n\n
import pandas as pd\nfile_rev = 'blah.csv'\n\nreviews=pd.read_csv(file_rev, sep=',',header=0, nrows=10000)\n\ncols = ['user_id', 'business_id', 'stars']\ncat_rev = reviews[cols]\n\nprint cat_rev\n
Run Code Online (Sandbox Code Playgroud)\n\n

df:

\n\n
                   user_id             business_id  stars\n0   Xqd0DzHaiyRqVH3WRG7hzg  vcNAWiLM4dR7D2nwwJ7nCA      5\n1   H1kH6QZV7Le4zqTRNxoZow  vcNAWiLM4dR7D2nwwJ7nCA      2\n2   zvJCcrpm2yOZrxKffwGQLA  vcNAWiLM4dR7D2nwwJ7nCA      4\n3   KBLW4wJA_fwoWmMhiHRVOA  vcNAWiLM4dR7D2nwwJ7nCA      4\n4   zvJCcrpm2yOZrxKffwGQLA  vcNAWiLM4dR7D2nwwJ7nCA      4\n5   Qrs3EICADUKNFoUq2iHStA  vcNAWiLM4dR7D2nwwJ7nCA      1\n6   jE5xVugujSaskAoh2DRx3Q  vcNAWiLM4dR7D2nwwJ7nCA      5\n7   QnhQ8G51XbUpVEyWY2Km-A  vcNAWiLM4dR7D2nwwJ7nCA      5\n8   tAB7GJpUuaKF4W-3P0d95A  vcNAWiLM4dR7D2nwwJ7nCA      1\n9   GP-h9colXgkT79BW7aDJeg  vcNAWiLM4dR7D2nwwJ7nCA      5\n10  uK8tzraOp4M5u3uYrqIBXg  UsFtqoBl7naz8AVUBZMjQQ      5\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望能够将其创建为字典,如下所示:

\n\n
abc = {user1 : {business1:star_rating, business2:star_rating\xe2\x80\xa6, \n                businessN:star_rating}, \n       user2: {} \xe2\x80\xa6 }\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后要访问,我只需: \n …

python pandas

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

通过networkx和使用python在图中添加节点和边

我需要创建一个 IP 地址图并标记它们之间的边,我为此编写了下面的代码。列表,即 parseOutput() 的内容,看起来像这样:

('172.16.254.128', '216.58.208.206')
('216.58.208.206', '172.16.254.128')
('172.16.254.128', '216.58.208.226')
('216.58.208.226', '172.16.254.128')
('172.16.254.128', '8.8.8.8')
('8.8.8.8', '172.16.254.128')
('172.16.254.128', '216.58.208.227')
('172.16.254.128', '216.58.208.227')
('216.58.208.227', '172.16.254.128')
('172.16.254.128', '216.58.208.227')
('172.16.254.128', '216.58.208.227')
...
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,出现以下错误:

Traceback (most recent call last):
  File "test.py", line 40, in <module>
    g.add_nodes_from(nodeList)
  File "/usr/local/lib/python2.7/dist-packages/networkx/classes/graph.py", line 429, in add_nodes_from
    nn,ndict = n
ValueError: need more than 0 values to unpack
Run Code Online (Sandbox Code Playgroud)
import logging, sys, struct, binascii, socket
from scapy.all import *
import networkx as nx
import matplotlib.pyplot as plt

pkts=rdpcap("pcapFile.pcap",20)

def parsePcap():
        IPList …
Run Code Online (Sandbox Code Playgroud)

python graph scapy networkx

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

Seaborn JointGrid KDE 边缘图上的重新缩放轴

我正在尝试创建一个 seaborn JointGrid 对象,在joint_plot和边缘的KDEs中使用散布+轮廓。这让我非常接近,但 y 轴边际没有适当缩放。手动重新缩放边缘轴的最佳方法是什么?提前致谢!

f = p.figure()
ax = f.add_subplot(111)
g = sns.JointGrid(xdata, ydata, xlim=(0,1), ylim=(0,1))
g.plot_joint(sns.kdeplot, shade=True, cmap="Greys", n_levels=10)
g.plot_joint(p.scatter, color='#e74c3c', s=1.5)
g.plot_marginals(sns.kdeplot, color="black", shade=True)
g.ax_joint.collections[0].set_alpha(0)
g.set_axis_labels(r'$\frac{\chi_{0}^2-\chi_{\mathrm{null},1}^2{\chi_{0}^2}$', r'$\frac{\chi_{0}^2-\chi_{\mathrm{null},4}^2}{\chi_{0}^2}$')
p.gcf().subplots_adjust(bottom=.15)
p.gcf().subplots_adjust(left=.15)
p.savefig('something')
Run Code Online (Sandbox Code Playgroud)

这是一个新帐户,我没有发布图片的声誉 - 我尝试的链接在这里 -> http://i.imgur.com/9iG860U.png

在此处输入图片说明

python matplotlib seaborn

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

根据Python Pandas中的条件减去两行

我正在使用一个数据集,我有时间和几种不同种类的微生物的浓度重复,所以它只是一个时间列和一堆数字为了这个问题.我每两个小时进行一次测量,有时我会连续进行两次测量,这些测量的时间戳会非常相似.对于那些类似的时间戳,我想取所有列的两行的平均值,并将这些平均值返回到之前放置两个值的新数据帧.

这是数据框的样子.时间戳已转换为数值,因为相对时间/日期无关紧要.你可以看到我正在谈论的一个例子,在第9和第10个索引有两个非常相似的时间

      Time        A1       A2       A3
 0    0.000069    118.0    108.0    70.0
 1    0.087049    189.0    54.0     89.0
 2    0.156551    154.0    122.0    107.0
 3    0.721516    129.0    148.0    148.0
 4    0.789329    143.0    162.0    212.0
 5    0.882743    227.0    229.0    149.0
 6    0.964907    208.0    255.0    241.0
 7    1.041424    200.0    241.0    222.0
 8    1.731806    733.0    838.0    825.0
 9    1.794340    804.0    996.0    954.0
10    1.794769    861.0    987.0    1138.0
Run Code Online (Sandbox Code Playgroud)

将时间列中的数字四舍五入到一个合理的值似乎是显而易见的,我可以使用一个groupby()函数(如果我实际上需要对它们进行分组)然后平均"重复"值,但我走了一条新的哲学道路我想使用pandas iterrows()函数逐行遍历行,并比较每两个连续的行并对它们应用一个条件来实现相同的结果.我已经到达了这样的东西,它没有错误代码,但似乎没有做任何事情.

for i, row in df.iterrows():
    row2 = row + 1 #I feel like this …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

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

DateParseError:未知的日期时间字符串格式,无法解析:ratio

我有一个数据框,其中单元格用浮点数填充,列名称采用日期时间格式,格式为年+季度 - 例如'1995Q2'.我想划分其中两列的值并将结果存储在一个新列中.我这样做了:

df['ratio'] = df['2008Q3'].div(df['2009Q2'])
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:

ValueError: Unknown datetime string format, unable to parse: ratio
Run Code Online (Sandbox Code Playgroud)

DateParseError: Unknown datetime string format, unable to parse: ratio
Run Code Online (Sandbox Code Playgroud)

当我尝试这个:

ratio_column = df['2008Q3'].div(df['2009Q2'])
df['ratio'] = df.add(ratio_column)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ValueError: can only call with other PeriodIndex-ed objects
Run Code Online (Sandbox Code Playgroud)

有帮助吗?谢谢!


可以使用以下示例重现错误:

import numpy as np
import pandas as pd
columns = pd.period_range('1999-1-1', '2000-1-1', freq='Q')
df = pd.DataFrame(np.random.randint(10, size=(4, len(columns))), columns=columns)
df['ratio'] = df['1999Q1'].div(df['1999Q2'])

ratio_column = df['1999Q1'].div(df['1999Q2'])
df['ratio'] = df.add(ratio_column)
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

如何将持久坐标转换应用于Matplotlib补丁?

我对matplotlib坐标系有点困惑(在Jupyter笔记本中使用它进行交互式动画).如果你创建一个补丁,比如一个圆圈,然后使用set_transform()进行翻译,我发现转换不是持久的,这意味着如果再次使用相同的(x,y)移位应用转换,则圆圈不会移动是因为看起来圆形位置在变换后没有得到更新,因此后续变换将应用于相同的原始色块位置.我的问题是如何应用转换,实际上不仅在应用补丁后移动补丁,还会更新补丁位置?假设我想应用一系列翻译,那么圆圈应该四处移动而不是从它的原始位置来回摆动.这是一个示例代码:

%import matplotlib
%matplotlib notebook

fig = plt.figure()
ax = fig.add_subplot(111, xlim=(-10, 10), ylim=(-10, 10))
c = ax.add_patch(plt.Circle((x, y), radius=0.5)
c.set_transform(ax.transData + mpl.transforms.Affine2D().translate(-5,-5))
c.set_transform(ax.transData + mpl.transforms.Affine2D().translate(10,10))
Run Code Online (Sandbox Code Playgroud)

如果你运行它,你会看到注释掉第一个翻译不会影响圆圈的最终位置.我原以为圆心的最终位置是(5,5)NOT(10,10).这意味着转换实际上不会更新补丁(圆圈)位置; 它只是将其翻译成图形/轴.

问题2:我发现另一件令人困惑的事情是,上面代码生成的圆圈确实看起来半径为0.5,但是在应用了(10,10)的翻译后,它在图中的翻译要少得多!! 好像翻译班次在应用之前按比例缩小了!我没有解释这个,它只是表明我不理解matplotlib坐标系和转换.

另一方面,plot()生成的对象(Line2D对象)可以通过set_data()方法进行转换,该方法更新对象的位置如下(假设图中的fig和ax对象):

L, = ax.plot(0, 0, 'ro', ms=8)
sx = 10 # shift in x
sy = 10 # shift in y
L.set_data(L.get_data()[0] + sx, L.get_data()[1] + sy)
Run Code Online (Sandbox Code Playgroud)

我不确定如何为matplotlib补丁做同样的事情?

python matplotlib

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

广播在numpy

我刚开始学习numpy了解numpy的scipy教程.我的问题与广播何时发生有关.

如本教程中所建议的,如果两个数组遵循某些条件,则它们是兼容的,例如:

  1. 他们是平等的
  2. 其中一个是1

我的问题是,假设我有以下两个数组:

import numpy as np

c1 = np.arange(10).reshape(2,5)
c2 = np.arange(8).reshape(2,4,1)
c3 = c1-c2
Run Code Online (Sandbox Code Playgroud)

但上面的操作给我兼容/广播错误如下:

ValueError: operands could not be broadcast together with shapes (2,5) (2,4,1)
Run Code Online (Sandbox Code Playgroud)

当我用笔和纸图解地表示这两个数组时,我得到了无法执行的操作,但是我无法从上面提到的教程中了解如何在数组上没有成功执行操作.请帮我理解.

我知道这是基本的东西,但这对我的理解很有帮助.

问候

python arrays numpy

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

用 BeautifulSoup 包装标签的内容

我试图用 BeautifulSoup 包装标签的内容。这:

<div class="footnotes">
    <p>Footnote 1</p>
    <p>Footnote 2</p>
</div>
Run Code Online (Sandbox Code Playgroud)

应该变成这样:

<div class="footnotes">
  <ol>
    <p>Footnote 1</p>
    <p>Footnote 2</p>
  </ol>
</div>
Run Code Online (Sandbox Code Playgroud)

所以我使用以下代码:

footnotes = soup.findAll("div", { "class" : "footnotes" })
footnotes_contents = ''
new_ol = soup.new_tag("ol") 
for content in footnotes[0].children:
    new_tag = soup.new_tag(content)
    new_ol.append(new_tag)

footnotes[0].clear()
footnotes[0].append(new_ol)

print footnotes[0]
Run Code Online (Sandbox Code Playgroud)

但我得到以下信息:

<div class="footnotes"><ol><
    ></
    ><<p>Footnote 1</p>></<p>Footnote 1</p>><
    ></
    ><<p>Footnote 2</p>></<p>Footnote 2</p>><
></
></ol></div>
Run Code Online (Sandbox Code Playgroud)

建议?

python lxml beautifulsoup

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