我知道有几种方法可以将列转换为日期对象,但我正在寻找的是同时格式化其他列的方法.说我有以下数据框:
import pandas as pd
url = "https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv"
df = pd.read_csv(url)
df["date"] = list(range(42005, 42005+len(df)))
Run Code Online (Sandbox Code Playgroud)
我想要实现的是能够使用一些格式打印这些数据,所以我可能会做类似以下的事情:
print(
df
.head(10)
.to_string(
formatters={"total_bill": "${:,.2f}".format,
"tip": "${:,.2f}".format
}
)
)
Run Code Online (Sandbox Code Playgroud)
但我也想在此步骤中格式化日期.我试着在这里寻找我正在寻找的东西,但是日期时间选项看起来似乎不适用于我正在尝试做的事情,而构建自定义选项对我的目标受众来说有点超出范围.
是否可以以简单的方式做到这一点?
我有一个包含电子邮件通信的数据集.一个例子:
library(dplyr)
library(tidyr)
dat <- data_frame('date' = Sys.time(),
'from' = c("person1@gmail.com", "person2@yahoo.com",
"person3@hotmail.com", "person4@msn.com"),
'to' = c("person2@yahoo.com,person3@hotmail.com", "person3@hotmail.com",
"person4@msn.com,person1@gmail.com,person2@yahoo.com", "person1@gmail.com"))
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我很容易看到我需要多少变量,所以我可以执行以下操作:
dat %>% separate(to, into = paste0("to_", 1:3), sep = ",", extra = "merge", fill = "right")
#Source: local data frame [4 x 5]
#
# date from to_1 to_2 to_3
# (time) (chr) (chr) (chr) (chr)
#1 2015-10-22 14:52:41 person1@gmail.com person2@yahoo.com person3@hotmail.com NA
#2 2015-10-22 14:52:41 person2@yahoo.com person3@hotmail.com NA NA
#3 2015-10-22 14:52:41 person3@hotmail.com person4@msn.com person1@gmail.com person2@yahoo.com
#4 2015-10-22 …Run Code Online (Sandbox Code Playgroud) 我已经查看了这个网站上我认为可能会有帮助的其他一些问题,比如这一个和这一个,但它们似乎没有回答我的问题.我所拥有的是以下内容:
$(document).ready(function() {
$(".has-submenu ul").hide();
$(".has-submenu").click(function() {
$(this).children("ul").toggle();
});
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li><a href="#">Item 1</a></li>
<li class="has-submenu"><a href="#">Item 2</a>
<ul>
<li><a href="#">Sub Item 1</a></li>
</ul>
</li>
</ul>Run Code Online (Sandbox Code Playgroud)
从这个片段中可以看出,无论是否单击"Item 2"或"Sub Item 1",子菜单都会被隐藏.我意识到这是因为"Sub Item 1"是其中的一部分<li class="has-submenu">,因此当它点击它时它会通过并切换子菜单.CSS正在做它应该做的事情,我只是不知道如何调整CSS说"只有li在点击父级时才隐藏子菜单.我试着修改JQuery click函数来寻找$(".has-submenu a")指定它应该只如果单击该特定元素,那么这样做,但这似乎没有帮助.
我确定这是一个简单的修复,我只是不知道该怎么做.谢谢!
我已经看到关于这个主题的SO上发布了几个类似的问题,但它们似乎措辞不当(例子)或者用不同的语言(例子).
在我的场景中,我认为白色空间所包围的一切都是一个词.表情符号,数字,字母串不是真正的单词,我不在乎.我只想获得一些关于找到的字符串的上下文,而不必读取整个文件来确定它是否是有效匹配.
我尝试使用以下内容,但如果您有一个很长的文本文件,则需要一段时间才能运行:
text <- "He served both as Attorney General and Lord Chancellor of England. After his death, he remained extremely influential through his works, especially as philosophical advocate and practitioner of the scientific method during the scientific revolution. Bacon has been called the father of empiricism.[6] His works argued for the possibility of scientific knowledge based only upon inductive and careful observation of events in nature. Most importantly, he argued this could be achieved …Run Code Online (Sandbox Code Playgroud) 一些简单的数据让我们开始:
import pandas as pd
import numpy as np
df = pd.DataFrame({"x": np.random.normal(size=100), "y": np.random.normal(size=100)})
Run Code Online (Sandbox Code Playgroud)
所以,直到这一点,我一直认为assign是相当于mutate在dplyr库中.但是,如果我尝试使用我assign在同一assign步骤中创建的变量,则会出现错误.考虑以下内容,这在R中是可以接受的:
df %>%
mutate(z = x * y, w = z + 10)
Run Code Online (Sandbox Code Playgroud)
如果我尝试等效的pandas,我会收到一个错误:
df.assign(z = df.x * df.y, w = z + 10) # Error
df.assign(z = df.x * df.y, w = lambda d: d.z + 10) # Error
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一方法是使用两个assign步骤:
df.assign(z = df.x * df.y).assign(w = lambda d: d.z + …Run Code Online (Sandbox Code Playgroud) 我正在使用两个要基于阈值合并的不同数据集。假设两个数据帧如下所示:
library(dplyr)
library(fuzzyjoin)
library(lubridate)
df1 = data_frame(Item=1:5,
DateTime=c("2015-01-01 11:12:14", "2015-01-02 09:15:23",
"2015-01-02 15:46:11", "2015-04-19 22:11:33",
"2015-06-10 07:00:00"),
Count=c(1, 6, 11, 15, 9),
Name="Sterling",
Friend=c("Pam", "Cyril", "Cheryl", "Mallory", "Lana"))
df1$DateTime = ymd_hms(df1$DateTime)
df2 = data_frame(Item=21:25,
DateTime=c("2015-01-01 11:12:15", "2015-01-02 19:15:23",
"2015-01-02 15:46:11", "2015-05-19 22:11:33",
"2015-06-10 07:00:02"),
Count=c(3, 7, 11, 15, 8),
Name="Sterling",
Friend=c("Pam", "Kreger", "Woodhouse", "Gillete", "Lana"))
df2$DateTime = ymd_hms(df2$DateTime)
Run Code Online (Sandbox Code Playgroud)
我现在想,是能够左连接df2与df1基于的模糊匹配DateTime,并Count为各自的价值在两秒钟内,而除了所有其他值Item都相同。我以为我可以做到以下几点:
df1 %>%
difference_left_join(df2, by=c("DateTime", "Count"), max_dist=2)
Run Code Online (Sandbox Code Playgroud)
但这给了我以下输出:
# A tibble: 8 …Run Code Online (Sandbox Code Playgroud) 我正在尝试以编程方式搜索网站,但提交按钮功能似乎主要由JavaScript提供支持.我并不过分熟悉它是如何工作的,所以我可能错了.
这是我正在使用的代码:
library(rvest)
BASE_URL = 'https://mdocweb.state.mi.us/otis2/otis2.aspx'
PARAMS = list(txtboxLName='Smith',
drpdwnGender='Either',
drpdwnRace='All',
drpdwnStatus='All',
submit='btnSearch')
# rvest approach
s = html_session(BASE_URL)
form = html_form(s)[[1]]
form = set_values(form, PARAMS)
resp = submit_form(s, form, submit='btnSearch') # This gives an error
# httr approach
resp = httr::POST(BASE_URL, body=PARAMS, encode='form')
html = httr::content(resp) # This just returns that same page I was on
Run Code Online (Sandbox Code Playgroud)
该按钮的HTML如下所示:
<input type="submit" name="btnSearch" value="Search" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSearch", "", true, "", "", false, false))" language="javascript" id="btnSearch" style="width:100px;">
Run Code Online (Sandbox Code Playgroud)
鉴于该onclick属性,我没有受过教育的假设是JavaScript的使用干扰了我的方法.但同样,我并不完全理解这一切是如何运作的,所以我可能错了.
无论哪种方式,我如何实现我的目标,如果有的话,使用rvest或httr …
我最近决定跳入 Python 池的最深处并开始将我的一些 R 代码转换为 Python 并且我被困在对我来说非常重要的事情上。在我的工作中,我花费了大量时间来解析文本数据,众所周知,文本数据非常非结构化。因此,我开始依赖正则表达式的环视功能,而 R 的环视功能非常强大。例如,如果我正在解析一个 PDF,当我对文件进行 OCR 时,它可能会在字母之间引入一些空格,我会得到我想要的值,如下所示:
oAcctNum <- str_extract(textBlock[indexVal], "(?<=ORIG\\s?:\\s?/\\s?)[A-Z0-9]+")
Run Code Online (Sandbox Code Playgroud)
在 Python 中,这是不可能的,因为使用?使后视成为可变宽度表达式而不是固定宽度。这个功能对我来说非常重要,它阻止了我想要使用 Python,但我不想放弃这种语言,我想知道 Pythonista 解决这个问题的方法。我是否必须在提取文本之前预处理字符串?像这样的东西:
oAcctNum = re.sub(r"(?<=\b\w)\s(?=\w\b)", "")
oAcctNum = re.search(r"(?<=ORIG:/)([A-Z0-9])", textBlock[indexVal]).group(1)
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来做到这一点?因为虽然这个例子是微不足道的,但这个问题以非常复杂的方式出现在我处理的数据中,我不想对我分析的每一行文本进行这种预处理。
最后,如果这不是问这个问题的正确地方,我深表歉意;我不知道还有什么地方可以张贴。提前致谢。
今天我在工作中遇到了一种奇怪的语法方法,我无法理解。假设我有以下列表:
my_list = [[1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
我的目标是根据某些条件过滤每个嵌套列表并覆盖列表中的元素。因此,假设我想从每个包含my_list偶数列表的嵌套列表中删除奇数,最终结果如下所示:
[[2], [4, 6]]
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用简单的赋值运算符来执行此操作,则它不起作用。
my_list = [[1, 2, 3], [4, 5, 6]]
for l in my_list:
l = [num for num in l if num % 2 == 0]
print(my_list)
Output: [[1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
但是,如果我“切片”列表,它会提供预期的输出。
my_list = [[1, 2, 3], [4, 5, 6]]
for l in my_list:
l[:] = [num for num in l if num % 2 == 0]
print(my_list)
Output: [[2], [4, 6]] …Run Code Online (Sandbox Code Playgroud)