这可能是一个愚蠢的问题,但如何从列表中向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) 我已经在这个问题上乱哄哄几个小时,我无法理解.使用XPath查找文本值很棘手,这个问题有太多的移动部分.
我有一个包含大表的网页,此表中的一个部分包含分配给特定单元的用户(受理人)列表.几乎总是有多个用户分配给一个单元,我需要确保将特定用户分配给表中的任何单元.我已经将几乎所有的选择器都用到了XPath上,而且我已经在这个问题的一半了.我似乎无法弄清楚如何使用contains
与text()
在此背景下.
这是我到目前为止所拥有的:
//td[@id='unit']/span [text()='asdfasdfasdfasdfasdf (Primary); asdfasdfasdfasdfasdf, asdfasdfasdfasdf; 456, 3456'; testuser]
Run Code Online (Sandbox Code Playgroud)
上面的XPath查询捕获了我正在查看的特定部分中的所有文本,这很好.但是,我只需要知道testuser是否在该部分中.
因为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'])
使用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"]
被接受?
我有一个函数的两个版本,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) 我想在此页面的标题中获取文本:
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) 我有一个功能设置,用于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) 我想在运行Raspbian的Raspberry Pi上使用Selenium WebDriver
with 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)
我看到其他人有类似我的问题 - …
我使用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"
情况?
我正在使用selenium
Python 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
.insrefs
和names
Regex.而不是调用sleep()
,我希望它等待WebElement中的内容ac_results
加载.
由于它将通过从列表中输入新的搜索词来连续使用搜索框来获取新数据,因此可以使用正则表达式来识别何时存在 …