小编yln*_*nor的帖子

基于列值拆分/扩展数据框

我有一个如下所示的 DataFrame,将标识符作为现有日期索引之上的一列。

pd.DataFrame(index = [pd.to_datetime('2021-01-01'), pd.to_datetime('2021-01-01'),pd.to_datetime('2021-01-02'),pd.to_datetime('2021-01-02'), pd.to_datetime('2021-01-03'),pd.to_datetime('2021-01-03')], columns=['id','A', 'B'], data=[['foo',1,5],['bar',8,12],['foo',7,1], ['bar',5,1], ['foo',4,3],['bar',7,1]])

Out[6]: 
             id  A   B
2021-01-01  foo  1   5
2021-01-01  bar  8  12
2021-01-02  foo  7   1
2021-01-02  bar  5   1
2021-01-03  foo  4   3
2021-01-03  bar  7   1
Run Code Online (Sandbox Code Playgroud)

我的目标是为除 id 之外的每一列(A 和 B)创建一个新的子数据框,dateIndex 作为单个索引,id (foo, bar) 作为列名。预期输出如下所示:

A
Out[9]: 
            foo  bar
2021-01-01    1    8
2021-01-02    7    5
2021-01-03    4    7

B
Out[11]: 
            foo  bar
2021-01-01    5   12
2021-01-02    1    1
2021-01-03    3    1
Run Code Online (Sandbox Code Playgroud)

python pandas

12
推荐指数
4
解决办法
530
查看次数

远程访问Apache Server

我有一个用于远程访问MySQL数据库的LAMP服务器(通过动态DNS服务).直到昨天,一切都运转良好.这是我到目前为止检查的内容,没有任何成功(我在尝试远程访问服务器时仍然收到超时错误):

  • 我的路由器上的动态DNS服务已启用,已针对正确的外部IP地址进行了更新(使用NoIP ddns.net).
  • 服务器在192.168.0.24本地工作正常,我可以从它访问MySQL数据库.
  • 端口转发设置正确
  • 路由器级别的防火墙已暂时禁用

这是我的Apache ports.conf文件:

    Listen 80
<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.com

    # Other directives here
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

SharkWire在失败的请求中给出了这个输出:

533 15.633088 192.168.0.14 79 ..***TCP 66 [TCP重传] 27536→80 [SYN] Seq = 0 Win = 8192 Len = 0 MSS = 1460 WS = 4 SACK_PERM = 1 -

**SharkWire的详细信息失败请求:http://imgur.com/a/KtGuY**

编辑:我也无法使用外部IP(而不是DynDNS地址)进行连接,因此问题似乎在服务器端而不是IP解析端.

我不知道该怎么检查,欢迎任何建议/想法.

apache dns dyndns server noip

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

在控制台中运行代码时,Pycharm不显示局部变量

我最近重新安装了Pycharm 2018.2.4专业人员,使用conda安装python 2.7.

使用之前的相同版本,我可以在控制台中运行脚本后访问本地变量.虽然,现在当我在控制台中运行脚本时,只有"特殊变量"可用.

更准确地说,如果代码运行良好,我将能够检索将在末尾存储的变量.但是如果脚本在某些时候失败,则不存储变量.而不是之前pycharm存储在错误行之前创建的值.

为了让您更好地理解,我们考虑以下代码:

a=100
b=300
c=b/a
Run Code Online (Sandbox Code Playgroud)

如果我"在控制台中运行"代码运行顺利,那么我可以执行以下操作

a
>> 100
Run Code Online (Sandbox Code Playgroud)

现在,如果我更改代码以使其执行错误:

    a=0
    b=300
    c=b/a
Run Code Online (Sandbox Code Playgroud)

它无法在第三行运行.但通常(在上周重新安装pycharm之前)在错误行之前创建的任何变量仍然存在.现在,如果我跑了

a
>> error a is not defined
Run Code Online (Sandbox Code Playgroud)

我的变量都被删除了.我不明白发生了什么.

欢迎任何建议.

console pycharm python-2.7

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

当天查询的日期时间列的最佳索引

我有下表,大约有 4 亿行。我必须SELECT对该表执行查询,通常涉及列WHERE上的子句Date_create

关键是我的大多数查询都是全天进行的(不考虑小时和秒)

+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| ID_num         | bigint(45)   | NO   | PRI | NULL    |       |
| Content        | varchar(250) | YES  |     | NULL    |       |
| User_ID        | bigint(24)   | NO   | MUL | NULL    |       |
| Location       | varchar(70)  | YES  |     | NULL    |       |
| Date_create    | datetime     | NO …
Run Code Online (Sandbox Code Playgroud)

mysql indexing datetime date

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

使用 Python mysql.connector 远程连接 MySQL

以下代码(从与 mysql 服务器不同的机器运行,在同一局域网内),使用 Python3 和 mysql.connector 工作在本地连接到 MySQL 数据库:

import mysql.connector
cnx = mysql.connector.connect(host='192.168.0.24', database='import_test',user='user_builder', password='password***', port=3309)
Run Code Online (Sandbox Code Playgroud)

但是,下面的代码,远程连接到同一个数据库, 不能正常工作

import mysql.connector
cnx = mysql.connector.connect(host='http://imaginarywebsite.ddns.net', database='import_test',user='user_builder', password='password***', port=3309)
Run Code Online (Sandbox Code Playgroud)

相反,我收到以下错误:

File "C:\Users\****\AppData\Roaming\Python\Python34\site-packages\mysql\connector\network.py", line 464, in open_connection
     errno=2003, values=(self.get_address(), _strioerror(err)))
mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'http://imaginarywebsite.ddns.net:3309' (11004 getaddrinfo failed)
Run Code Online (Sandbox Code Playgroud)

这是我的 my.cnf 文件的摘录:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1024M
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=7000
innodb_thread_concurrency=0

port            = 3309
bind-address    = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

所以,这是目前有效的:

  • 使用 192.168.0.24:3309 地址在本地连接到数据库,所以我确定问题不是来自“权限授予”或任何登录/密码/端口错误。
  • 使用http://imaginarywebsite.ddns.net/phpmyadmin通过 phpmyadmin 远程连接,所以我确定问题不是来自我的 DNS …

python mysql ssh remote-access mysql-connector

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

为什么第二次运行 MySQL 查询速度更快?

我有一个非常奇怪的问题来自我刚刚所做的观察,这实际上可能帮助我更好地理解我的数据库行为并更好地设计它。

首先,我们所说的这是一个MySQL数据库。User_ID 字段有一个索引。

这是我运行的代码:

query3 =("SELECT Content FROM Twit "
          "WHERE User_ID = %s "
          "limit 25 ")

for userid, c_word in user22_list:
    cursorSQL.execute(query3, (userid,))
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我不明白,例如,当我为 200 个第一个用户运行它,然后停止它时,每 10 个用户大约需要 1 秒,非常慢。

但是,如果几分钟后我为 1000 个第一个用户运行它,它将在不到一秒的时间内达到 200 个用户,然后减慢到 10 个用户/秒的速度,依此类推,如果我在那之后运行它 5000 个(非常直到 1000 之前快,之后慢)。

问题:

  • 查询是否可以临时存储在某个地方(在我的服务器的 RAM 中?)来解释其速度?
  • 您认为有什么方法可以加快这一过程吗?

***** 编辑1:根据要求:

的输出 SHOW CREATE TABLE Twit

 Table    Create Table    
    Twit  CREATE TABLE `Twit` (
     `ID_num` bigint(45) NOT NULL,
     `Content` varchar(250) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
     `User_ID` bigint(24) NOT NULL,
     `Location` varchar(70) …
Run Code Online (Sandbox Code Playgroud)

mysql database database-design

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

迭代 MySQL 连接器游标时 Python 速度很慢

我有以下运行速度非常慢的代码(迭代 57,390 行需要 6.5 秒):

import mysql.connector

cnx=mysql.connector.connect(host=***, ***)
cursorSQL = cnx.cursor()

for dt in date_vect:
        cursorSQL.execute(query2, ((dt[0] + '-00:00:00'), (dt[0] + '-23:59:59'))) 
          #Takes about 0.25sec per iteration
        usr_list = list(cursorSQL.fetchall())  
          #takes about 6.20sec per iteration
Run Code Online (Sandbox Code Playgroud)

正如这里推荐的:Stackoverflow:Python 在...时很慢,我试过:

  • usr_list= cursorSQL.fetchall()
  • usr_list= list(cursorSQL.fetchall())

正如@postoronnim 所建议的,我也尝试过:

  • usr_list= cursorSQL.fetchmany(57390)

没有成功。

然而,有一些缓存效果,因为在第二次运行时相同的迭代只需要 0.5 秒,然后又减慢到 6.5 秒。

  1. 任何想法可能来自哪里?
  2. 你能确认它与我的数据库无关吗,因为所有从MySQL的导入都是在线完成的cursor.executefetchall()缓慢只是由于列表处理?
  3. 你能解释一下为什么会有缓存效应吗?

谢谢。

规格:Python 3.5 | 8核i7 | 16go 公羊

python mysql cursor fetchall mysql-connector-python

5
推荐指数
0
解决办法
1431
查看次数

Tensorflow:如何像numpy中那样使用2D-index来索引张量

我想在Tensorflow中执行以下numpy代码:

input = np.array([[1,2,3]
                  [4,5,6]
                  [7,8,9]])
index1 = [0,1,2]
index2 = [2,2,0]
output = input[index1, index2]
>> output
[3,6,7]
Run Code Online (Sandbox Code Playgroud)

给定输入,例如:

input = tf.constant([[1, 2, 3],
                     [4, 5, 6],
                     [7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下方法,但似乎有点过头了:

index3 = tf.range(0, input.get_shape()[0])*input.get_shape()[1] + index2
output = tf.gather(tf.reshape(input, [-1]), index3)
sess = tf.Session()
sess.run(output)
>> [3,6,7]
Run Code Online (Sandbox Code Playgroud)

这仅起作用是因为我的第一个索引方便地为[0,1,2],但对于[0,0,2]则不可行(除了看起来很长而且很丑)。

您是否有更简单的语法,更张量/ pythonic的语法?

python indexing numpy python-3.x tensorflow

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

打破生成器循环的优雅方法:GeneratorExit 错误

我有一个在生成器上循环的代码。如果第二次迭代到达它,我必须打破该循环。为此,我使用,它在调用该方法时break引发 a 。GeneratorExitGenerator.close()

for page in limit_handled(tweepy.Cursor(..., ..., ...):
    while len(the_list) < 400:
        for status in page:

            def process_status(tweet):
                ...
                ...

            the_list.append(process_status(status))

    break
Run Code Online (Sandbox Code Playgroud)

是否有一种更优雅的方法可以避免此类错误?

Exception ignored in: <generator object limit_handled at 0x000000003AB300A0>
RuntimeError: generator ignored GeneratorExit
Run Code Online (Sandbox Code Playgroud)

我已经看到了这两个问题的答案:如何获取第一个 N... 如何获取下一个 n...但这不是同一个问题。就我而言,Generator使用Cursor. 因此,在每次迭代时它都会处理一个查询。我想在达到至少 400 个状态后停止查询,这可能在第二次或第三次迭代之后发生(查询通常返回 200 行,但也可以更少)。此处不能选择对生成器进行切片。避免处理所有查询(总共 16 个,大约 16*200=3200 个状态)正是我想通过在返回 400 个状态后破坏代码来避免的。

编辑:为了更好地理解,这里是我的生成器的代码:

def limit_handled(cursor):
    global user_timeline_remaining
    while True:
        if user_timeline_remaining>1:
            try:
                yield cursor.next()
            except BaseException as e:
                print('failed_on_CURSOR_NEXT', str(e))
        else: …
Run Code Online (Sandbox Code Playgroud)

python generator break python-3.x

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

根据列向量制作Pandas掩码

我有一个给定的数据帧,我希望每一行能够选择高于该行给定百分位数的值.

让我们考虑一下这个数据帧:

df = pd.DataFrame({'A' : [5,6,3,4, 0,5,9], 'B' : [1,2,3, 5,7,0,1]})

   A  B
0  5  1
1  6  2
2  3  3
3  4  5
4  0  7
5  5  0
6  9  1
Run Code Online (Sandbox Code Playgroud)

并且每行的第20个分位数的给定向量:

rowsQuantiles = df.quantile(0.2, axis=1)

0    1.8
1    2.8
2    3.0
3    4.2
4    1.4
5    1.0
6    2.6
Run Code Online (Sandbox Code Playgroud)

我希望能够为每行过滤出行的分位数以下的值,以获得以下结果:

quantileMask = df > rowsQuantiles

   A      B
0  True   False
1  True   False
2  False  False
3  False  True  
4  False  True  
5  True   False …
Run Code Online (Sandbox Code Playgroud)

python mask filter slice pandas

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