小编Win*_*ags的帖子

Pandas:向DataFrame添加多个空列

这可能是一个愚蠢的问题,但如何从列表中向DataFrame添加多个空列?

我可以:

df["B"] = None
df["C"] = None
df["D"] = None
Run Code Online (Sandbox Code Playgroud)

但我做不到:

df[["B", "C", "D"]] = None

KeyError: "['B' 'C' 'D'] not in index"
Run Code Online (Sandbox Code Playgroud)

python pandas

54
推荐指数
6
解决办法
5万
查看次数

使用text()检索包含的xpath文本

我已经在这个问题上乱哄哄几个小时,我无法理解.使用XPath查找文本值很棘手,这个问题有太多的移动部分.

我有一个包含大表的网页,此表中的一个部分包含分配给特定单元的用户(受理人)列表.几乎总是有多个用户分配给一个单元,我需要确保将特定用户分配给表中的任何单元.我已经将几乎所有的选择器都用到了XPath上,而且我已经在这个问题的一半了.我似乎无法弄清楚如何使用containstext()在此背景下.

这是我到目前为止所拥有的:

//td[@id='unit']/span [text()='asdfasdfasdfasdfasdf (Primary); asdfasdfasdfasdfasdf, asdfasdfasdfasdf; 456, 3456'; testuser]
Run Code Online (Sandbox Code Playgroud)

上面的XPath查询捕获了我正在查看的特定部分中的所有文本,这很好.但是,我只需要知道testuser是否在该部分中.

xpath

27
推荐指数
1
解决办法
9万
查看次数

Pandas:如果A列中的行包含"x",则将"y"写入B列中的行

因为pandas,我正在寻找一种方法,根据A列中相应行的子串,将条件值写入B列中的每一行.

因此,如果单元格A中包含"BULL",写"Long"B.或者,如果细胞中A含有"BEAR",写"Short"B.

期望的输出:

A                  B
"BULL APPLE X5"    "Long"
"BEAR APPLE X5"    "Short"
"BULL APPLE X5"    "Long"
Run Code Online (Sandbox Code Playgroud)

B最初是空的: df = pd.DataFrame([['BULL APPLE X5',''],['BEAR APPLE X5',''],['BULL APPLE X5','']],columns=['A','B'])

python pandas

19
推荐指数
3
解决办法
3万
查看次数

Pandas:请参阅列名,不区分大小写

使用Pandas DataFrame,假设我在csv文件中有一堆列,我希望能够通过不区分大小写的名称访问其中任何一个列.

import pandas as pd

df = pd.read_csv(path_to_csv, delimiter=",")

df2 = df["Size"]
Run Code Online (Sandbox Code Playgroud)

实际的列名是"Size".我能做什么才能df2 = df["sIZE"]被接受?

python case-insensitive pandas

14
推荐指数
3
解决办法
9252
查看次数

Pandas函数:DataFrame.apply()运行顶行两次

我有一个函数的两个版本,Pandas用于逐行Python 2.7遍历inputs.csv.

第一个版本用于Series.apply()a single column,并按预期遍历每一行.

第二个版本使用DataFrame.apply()on multiple columns,由于某种原因,它读取顶行两次.然后继续执行其余的行而不重复.

任何想法为什么后者读取顶行两次?


版本#1 - Series.apply() (读取顶行一次)

import pandas as pd
df = pd.read_csv(inputs.csv, delimiter=",")

def v1(x):
    y = x
    return pd.Series(y)
df["Y"] = df["X"].apply(v1)
Run Code Online (Sandbox Code Playgroud)

版本#2 - DataFrame.apply() (读取顶行两次)

import pandas as pd
df = pd.read_csv(inputs.csv, delimiter=",")

def v2(f):
    y = f["X"]
    return pd.Series(y)
df["Y"] = df[(["X", "Z"])].apply(v2, axis=1)
Run Code Online (Sandbox Code Playgroud)

print y:

v1(x):            v2(f):

    Row_1         Row_1
    Row_2         Row_1
    Row_3         Row_2
                  Row_3
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Python Selenium:查找h1元素但返回空文本字符串

我想在此页面的标题中获取文本:

在此输入图像描述

iShares FTSE MIB UCITS ETF EUR(Dist)

标签看起来像这样:

<h1 class="product-title" title="iShares FTSE MIB UCITS ETF EUR (Dist)"> iShares FTSE MIB UCITS ETF EUR (Dist) </h1>
Run Code Online (Sandbox Code Playgroud)

我正在使用这个xPath:

xp_name = ".//*[@class[contains(normalize-space(.), 'product-title')]]"
Run Code Online (Sandbox Code Playgroud)

.text在Selenium WebDriver for Python中检索:

new_name = driver.find_element_by_xpath(xp_name).text
Run Code Online (Sandbox Code Playgroud)

驱动程序找到xpath,但是当我打印时new_name,macOS Terminal只打印一个空字符串:""

这可能是什么原因?

在此输入图像描述


注意:我还尝试了一些其他的xpath替代方案,获得相同的结果,例如:

xp_name = ".//*[@id='fundHeader']//h1"
Run Code Online (Sandbox Code Playgroud)

python selenium xpath hidden

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

熊猫:不断从功能写入csv

我有一个功能设置,用于Pandas运行大量的行,input.csv并将结果输入到系列中.然后它将系列写入output.csv.

但是,如果进程中断(例如,由于意外事件),程序将终止,并且所有进入csv的数据都将丢失.

有没有办法将数据连续写入csv,无论该函数是否为所有行完成?

最好是,每次程序启动时,output.csv都会创建一个空白,该空白在函数运行时附加到空白处.

import pandas as pd

df = pd.read_csv("read.csv")

def crawl(a):
    #Create x, y
    return pd.Series([x, y])

df[["Column X", "Column Y"]] = df["Column A"].apply(crawl)
df.to_csv("write.csv", index=False)
Run Code Online (Sandbox Code Playgroud)

python pandas

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

如何在Raspberry Pi上安装PhantomJS与Python Selenium一起使用?

我想在运行Raspbian的Raspberry Pi上使用Selenium WebDriverwith PhantomJS作为无头浏览器运行Python脚本.

我最初在OS X中编写了脚本,它可以正常工作.但是为了让它在Raspberry上运行,我遇到了问题.

尝试运行脚本时,我收到此错误:

raise WebDriverException("Can not connect to the Service %s" % self.path)
selenium.common.exceptions.WebDriverException: Message: Can not connect to the Service /usr/bin/phantomjs
Run Code Online (Sandbox Code Playgroud)

脚本的简要版本:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

user_agent = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) " +
    "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36")

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = user_agent

serv_args = ["--ignore-ssl-errors=false", "--ssl-protocol=tlsv1", 
    "--disk-cache=false"]

driver = webdriver.PhantomJS(executable_path="/usr/bin/phantomjs", 
    desired_capabilities = dcap, service_arguments = serv_args, port=65000)
Run Code Online (Sandbox Code Playgroud)

我看到其他人有类似我的问题 - …

python linux selenium phantomjs raspberry-pi

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

Python正则表达式AttributeError:'NoneType'对象没有属性'group'

我使用Regex从网页上的搜索框中检索某些内容selenium.webDriver.

searchbox = driver.find_element_by_class_name("searchbox")
searchbox_result = re.match(r"^.*(?=(\())", searchbox).group()
Run Code Online (Sandbox Code Playgroud)

只要搜索框返回与Regex匹配的结果,代码就会起作用.但如果搜索框回复字符串,"No results"我会收到错误:

AttributeError:'NoneType'对象没有属性'group'

如何让脚本处理这种"No results"情况?

python regex attributeerror

7
推荐指数
2
解决办法
4万
查看次数

Selenium:等到WebElement中的文本发生变化

我正在使用seleniumPython 2.7.从网页上的搜索框中检索内容.搜索框动态检索并在框中显示结果.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
import re
from time import sleep

driver = webdriver.Firefox()
driver.get(url)

df = pd.read_csv("read.csv")

def crawl(isin):
    searchkey = driver.find_element_by_name("searchkey")
    searchkey.clear()
    searchkey.send_keys(isin)
    sleep(11)

    search_result = driver.find_element_by_class_name("ac_results")
    names = re.match(r"^.*(?=(\())", search_result.text).group().encode("utf-8")
    product_id = re.findall(r"((?<=\()[0-9]*)", search_result.text)
    return pd.Series([product_id, names])

df[["insref", "name"]] = df["ISIN"].apply(crawl)

print df
Run Code Online (Sandbox Code Playgroud)

代码的相关部分可以在下面找到 def crawl(isin):

  • 程序在搜索框中输入要搜索的内容(该框名称为 searchkey).
  • 然后它sleep()会等待内容显示在搜索框下拉字段中ac_results.
  • 然后得到两个变量insrefsnamesRegex.

而不是调用sleep(),我希望它等待WebElement中的内容ac_results加载.

由于它将通过从列表中输入新的搜索词来连续使用搜索框来获取新数据,因此可以使用正则表达式来识别何时存在 …

python selenium selenium-webdriver

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