我正在尝试创建一个循环python函数,它执行任务并提示用户进行响应,如果用户在给定时间内没有响应,则序列将重复.
这是基于这个问题:如何设置raw_input的时间限制
任务由...表示some_function().超时是一个变量,以秒为单位.我有以下代码的两个问题:
无论用户是否提示,raw_input提示在指定的4秒时间后都不会超时.
当输入'q'的raw_input时(没有'',因为我知道键入的任何内容会自动输入为字符串),该函数不会退出循环.
`
import thread
import threading
from time import sleep
def raw_input_with_timeout():
prompt = "Hello is it me you're looking for?"
timeout = 4
astring = None
some_function()
timer = threading.Timer(timeout, thread.interrupt_main)
try:
timer.start()
astring = raw_input(prompt)
except KeyboardInterrupt:
pass
timer.cancel()
if astring.lower() != 'q':
raw_input_with_timeout()
else:
print "goodbye"
Run Code Online (Sandbox Code Playgroud)
`
所以我想用以下代码做的是读取列表列表并通过调用函数将它们放入checker,然后log_result处理函数的结果checker.我试图使用多线程执行此操作,因为rows_to_parse实际上变量名称有数百万行,因此使用多个核心应该会大幅加快此过程.
目前的代码不起作用并导致Python崩溃.
我有的担忧和问题:
df中保存的现有df在整个过程中维护索引,否则log_result会对哪行需要更新感到困惑.apply_async不是适当的多处理函数来执行这个任务,因为我相信计算机读取和写入df的顺序可能会破坏它? df
但我不确定如何进行这样做.谢谢你的帮助.
import pandas as pd
import multiprocessing
from functools import partial
def checker(a,b,c,d,e):
match = df[(df['a'] == a) & (df['b'] == b) & (df['c'] == c) & (df['d'] == d) & (df['e'] == e)]
index_of_match = match.index.tolist()
if len(index_of_match) == 1: #one match in df
return index_of_match
elif len(index_of_match) > 1: #not likely because duplicates will be removed …Run Code Online (Sandbox Code Playgroud) 在Python中检查值是否在列表中,您可以简单地执行以下操作:
>>>9 in [1,2,3,6,9]
True
Run Code Online (Sandbox Code Playgroud)
我想为Pandas DataFrame做同样的事情但不幸的是Pandas不承认这种表示法:
>>>import pandas as pd
>>>df = pd.DataFrame([[1,2,3,4],[5,6,7,8]],columns=["a","b","c","d"])
a b c d
0 1 2 3 4
1 5 6 7 8
>>>7 in df
False
Run Code Online (Sandbox Code Playgroud)
如何使用Pandas DataFrame实现这一目标而不迭代每个列/行或任何复杂的东西?
嗨所以我有以下数据帧:
Fruit metric
0 Apple NaN
1 Apple 100.0
2 Apple NaN
3 Peach 70.0
4 Pear 120.0
5 Pear 100.0
6 Pear NaN
Run Code Online (Sandbox Code Playgroud)
我的目标是按果实分组并按顺序将每个值的metric非空值添加到具有其自己的单独列的累积列表中,如下所示:
Fruit metric metric_cum
0 Apple NaN []
1 Apple 100.0 [100]
2 Apple NaN [100]
3 Peach 70.0 [70]
4 Pear 120.0 [120]
5 Pear 100.0 [120, 100]
6 Pear NaN [120, 100]
Run Code Online (Sandbox Code Playgroud)
我试过这样做:
df['metric1'] = df['metric'].astype(str)
df.groupby('Fruit')['metric1'].cumsum()
Run Code Online (Sandbox Code Playgroud)
但这导致了一个DataError: No numeric types to aggregate.
我也试过这样做:
df.groupby('Fruit')['metric'].apply(list)
Run Code Online (Sandbox Code Playgroud)
导致:
Fruit
Apple [nan, 100.0, …Run Code Online (Sandbox Code Playgroud) 我已尝试过多种方法将其编码为最终结果"BACK RUSHIN'",最重要的字符是右撇号'.
我想要一种方法来使用Python中的一些内置函数来获得最终结果,其中正常字符串和unicode字符串之间没有区别.
这是我用来检索字符串的代码: str(unicode(etree.tostring(root.xpath('path')[0],method='text', encoding='utf-8'),errors='ignore')).strip()
结果是:缺少'BACK RUSHIN'撇号的东西'.
另一种方式是: root.xpath('path/text()')
结果是:u'BACK RUSHIN\u2019'在python中.
最后,如果我尝试: u'BACK RUSHIN\u2019'.encode('ascii', 'replace')
结果是: 'BACK RUSHIN?'
请不要替换函数,我想利用pythons编解码库.也没有打印字符串,因为它被保存在变量中.
谢谢
嗨,我有大约10个表,我已经使用lxml进行了分类。
>>>import pandas as pd
>>>import lxml
>>>root = lxml.etree.HTML(htmlcontent)
>>>tables = root.findall('.//*[@id="info-container"]/table')
>>>readabletables = tables[::2]
>>>len(readabletables) = 5
>>>readabletables[0]
<Element table at 0x105241e60>
Run Code Online (Sandbox Code Playgroud)
我希望这5张表像一样被熊猫读取和解释pd.read_html。
我将如何去做呢?