我有一个DataFrame df:
A B
a 2 2
b 3 1
c 1 3
Run Code Online (Sandbox Code Playgroud)
我想根据以下标准创建一个新列:
如果排 A == B: 0
如果排A > B: 1
如果排 A < B: -1
所以鉴于上表,它应该是:
A B C
a 2 2 0
b 3 1 1
c 1 3 -1
Run Code Online (Sandbox Code Playgroud)
对于if else我这样做的典型情况np.where(df.A > df.B, 1, -1),pandas是否提供了一个特殊的语法来一步解决我的问题(无需创建3个新列然后组合结果)?
我已经看过所有类似的线程,阅读文档,并尝试了许多组合来存储空值,就像IntegerField在db中一样,每次都失败.
我正在使用MySQL.
我models.py定义了一个age=models.IntegerField()字段.我从csv文件填充db,有些单元格没有值.Django文档说:
Field.null
If True, Django will store empty values as NULL in the database. Default is False.
Note that empty string values will always get stored as empty strings, not as NULL.
Run Code Online (Sandbox Code Playgroud)
因为我正在使用IntegerField我想要一个空字符串(来自csv的空单元格)存储NULL在db中.因此,我(想)必须添加null=True到该age领域.实际上,我尝试了更多:
age=models.IntegerField()
age=models.IntegerField(null=True)
age=models.IntegerField(null=True, blank=True)
age=models.IntegerField(null=True, blank=True, default=None)
Run Code Online (Sandbox Code Playgroud)
每次我将空字符串插入到我得到的数据库中
ValueError: invalid literal for int() with base 10: ''
Run Code Online (Sandbox Code Playgroud)
有什么猜测我还能做什么?
我有一个.csv文件,如下所示:
Male, Male, Male, Female, Female
R, R, L, R, R
.86, .67, .88, .78, .81
Run Code Online (Sandbox Code Playgroud)
我想把它读成df,所以我有:
Male Female
R L R
0 .86 .67 .88 .78 .81
Run Code Online (Sandbox Code Playgroud)
我做了:
df = pd.read_csv('file.csv', header=[0,1])
Run Code Online (Sandbox Code Playgroud)
但headers不削减它.结果如何
Empty DataFrame
Columns: [(Male, R), (Male, R), (Male, L), (Female, R), (Female, R)]
Index: []
Run Code Online (Sandbox Code Playgroud)
然而,标题上的文档说:
(...)Can be a list of integers that specify row
locations for a multi-index on the columns E.g. [0,1,3]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我怎么可能让它工作?
这是我第二天使用Selenium 2库,而Unicode的痛苦似乎永远不会消退.
我只是做最基本的操作,想要打印页面源:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://google.com")
print driver.page_source
Run Code Online (Sandbox Code Playgroud)
果然,我收到一个错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0119' in position 62045:
ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我怎么能把它编码到utf-8?
我有2个清单:
first_lst = [('-2.50', 0.49, 0.52), ('-2.00', 0.52, 0.50)]
second_lst = [('-2.50', '1.91', '2.03'), ('-2.00', '1.83', '2.08')]
Run Code Online (Sandbox Code Playgroud)
我想对它做以下数学运算:
乘以0.49由1.91(从相应的值first_lst和second_lst)和乘0.52由2.03(对应值也).我希望这样做,条件是0每个相应元组中位置的值是理想的,所以-2.50== -2.50等.显然,我们也做同样的数学运算重组元组.
我的代码:
[((fir[0], float(fir[1])*float(sec[1]), float(fir[2])*float(sec[2])) for fir in first_lst) for sec in second_lst if fir[0] == sec[0]]
Run Code Online (Sandbox Code Playgroud)
然而产生一些对象:
[<generator object <genexpr> at 0x0223E2B0>]
Run Code Online (Sandbox Code Playgroud)
你能帮我解决一下代码吗?
鉴于此基准日期:
base_date = "10/29 06:58 AM"
Run Code Online (Sandbox Code Playgroud)
我想在列表中找到一个包含最接近日期的元组base_date,但它不能是更早的日期.
list_date = [('10/30 02:18 PM', '-103', '-107'), ('10/30 02:17 PM', '+100', '-110'), \
('10/29 02:15 AM', '-101', '-109')
Run Code Online (Sandbox Code Playgroud)
所以这里的输出应该是('10/30 02:17 PM', '+100', '-110')(它不能是第3个元组,因为它的发生日期早于基准日期)
我的问题是,这个日期比较是否存在任何模块?我试图首先将数据全部更改为AM格式然后进行比较,但我的代码变得很丑,有很多切片.
@编辑:
要测试的大清单:
[('10/30 02:18 PM', '+13 -103', '-13 -107'), ('10/30 02:17 PM', '+13 +100', '-13 -110'), ('10/30 02:15 PM', '+13 -101', '-13 -109'), ('10/30 02:14 PM', '+13 -103', '-13 -107'), ('10/30 01:59 PM', '+13 -105', '-13 -105'), ('10/30 01:46 PM', '+13 -106', '-13 …Run Code Online (Sandbox Code Playgroud) 鉴于此列表
my_lst = ['LAC', 'HOU', '03/03 06:11 PM', '2.13', '1.80', '03/03 03:42 PM']
Run Code Online (Sandbox Code Playgroud)
我想根据字典值更改其值0th和1st值:
def translate(my_lst):
subs = {
"Houston": "HOU",
"L.A. Clippers": "LAC",
}
Run Code Online (Sandbox Code Playgroud)
所以列表变成:
['L.A. Clippers', 'Houston', '03/03 06:11 PM', '2.13', '1.80', '03/03 03:42 PM']
Run Code Online (Sandbox Code Playgroud) 我想点击悬停后可见的按钮.它的HTML是:
<span class="info"></span>
Run Code Online (Sandbox Code Playgroud)
我用过这段代码:
import selenium.webdriver as webdriver
from selenium.webdriver.common.action_chains import ActionChains
url = "http://example.com"
driver = webdriver.Firefox()
driver.get(url)
element = driver.find_element_by_class_name("info")
hov = ActionChains(driver).move_to_element(element)
hov.perform()
element.click()
Run Code Online (Sandbox Code Playgroud)
虽然不行.我得到一个与最后一行代码相关的错误element.click():
selenium.common.exceptions.ElementNotVisibleException: Message: \
u'Element is not currently visible and so may not be interacted with'
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
我正在玩BeautifulSoup 4,我有这个HTML代码:
</tr>
<tr>
<td id="freistoesse">Giraffe</td>
<td>14</td>
<td>7</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我想匹配<td>标签之间的两个值,所以这里是14和7.
我试过这个:
giraffe = soup.find(text='Giraffe').findNext('td').text
Run Code Online (Sandbox Code Playgroud)
但这只是匹配14.如何使用此功能匹配这两个值?
我正在使用 vagrant 和 Virtualbox,所以我不能runserver使用默认端口和地址,否则它将无法工作。
姜戈 说:
(...) to listen on all public IPs (useful if you want to show off your work on
other computers), use:
python manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过访问服务器,http://127.0.0.1:8888/但它说Unable to connect。你猜如何正确运行服务器?
我已经关注了这些gettingstartedwithdjango视频,这http://127.0.0.1:8888/对作者很有用。
python ×9
python-2.7 ×3
django ×2
pandas ×2
selenium ×2
conditional ×1
csv ×1
date ×1
hover ×1
list ×1
multi-index ×1
mysql ×1
null ×1
replace ×1
unicode ×1