我对一件简单的事情感到有点困扰。我试图安装一个名为 hunspell 的包,但我发现它最初是一个 R 包。我安装了这个版本: https: //anaconda.org/conda-forge/r-hunspell,但我无法导入它。这个包应该可以与 Python 一起使用吗?我应该使用rpy2
导入它吗?第一次使用跨平台包,所以我有点困惑。
需要明确的是,import hunspell
带来ModuleNotFoundError: No module named 'hunspell'
并import r-hunspell
带来SyntaxError: invalid syntax
。
我还注意到这个包也安装了一个r-base
包,但我也不知道如何导入它。
我正在执行一项非常简单的任务:应用于wide_to_long
DataFrame,但每次运行它时,我都会得到一个空的 DataFrame。我几乎确定我的做法是正确的,所以我查阅了文档并尝试应用其中显示的示例,它还带来了一个空的 DataFrame!这是示例代码:
import pandas as pd
df = pd.DataFrame({
'famid': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'birth': [1, 2, 3, 1, 2, 3, 1, 2, 3],
'ht_one': [2.8, 2.9, 2.2, 2, 1.8, 1.9, 2.2, 2.3, 2.1],
'ht_two': [3.4, 3.8, 2.9, 3.2, 2.8, 2.4, 3.3, 3.4, 2.9]
})
l = pd.wide_to_long(df, stubnames='ht', i=['famid', 'birth'], j='age', sep='_', suffix='\\w')
l.shape
Run Code Online (Sandbox Code Playgroud)
输出:
Out[2]: (0, 3)
Run Code Online (Sandbox Code Playgroud)
我尝试更新 Pandas,但没有帮助。可能会发生什么?
我对 SQL 世界有点陌生,但我正在学习名为Optimizing pandas.read_sql for Postgres 的教程。问题是,我正在处理一个大数据集,类似于教程中的示例,我需要一种更快的方法来执行查询并将其转换为 DataFrame。在那里,他们使用这个函数:
def read_sql_tmpfile(query, db_engine):
with tempfile.TemporaryFile() as tmpfile:
copy_sql = "COPY ({query}) TO STDOUT WITH CSV {head}".format(
query=query, head="HEADER"
)
conn = db_engine.raw_connection()
cur = conn.cursor()
cur.copy_expert(copy_sql, tmpfile) # I want to replicate this
tmpfile.seek(0)
df = pandas.read_csv(tmpfile)
return df
Run Code Online (Sandbox Code Playgroud)
我尝试复制它,如下所示:
def read_sql_tmpfile(query, connection):
with tempfile.TemporaryFile() as tmpfile:
copy_sql = "COPY ({query}) TO STDOUT WITH CSV {head}".format(
query=query, head="HEADER"
)
cur = connection.cursor()
cur.copy_expert(copy_sql, tmpfile)
tmpfile.seek(0)
df = pandas.read_csv(tmpfile)
return df
Run Code Online (Sandbox Code Playgroud)
问题是, …
我对此有点麻烦。我的数据框如下所示:
id amount dummy
1 130 0
1 120 0
1 110 1
1 nan nan
1 nan nan
2 nan 0
2 50 0
2 20 1
2 nan nan
2 nan nan
Run Code Online (Sandbox Code Playgroud)
所以,我需要做的是,在虚拟对象获取value = 1之后,我需要为每个变量的数量填充零id
,如下所示:
id amount dummy
1 130 0
1 120 0
1 110 1
1 0 nan
1 0 nan
2 nan 0
2 50 0
2 20 1
2 0 nan
2 0 nan
Run Code Online (Sandbox Code Playgroud)
我猜我需要的某种组合groupby('id')
,fillna(method='ffill')
也许一个.loc
或一个shift() …
我的问题很简单,但我不确定是否有办法完成我正在寻找的事情:
我必须在 SQL 数据库中存储一些数据,其中包括一些稍后将使用的间隔。因此,我必须将其存储为字符串,如下所示:
variable interval
A (-0.001, 2.0]
A (2.0, 6.0]
Run Code Online (Sandbox Code Playgroud)
那么,我想使用所说的间隔来削减另一个变量,如下所示:
df1 = pd.DataFrame({'interval': {4: '(-0.001, 2.0]',
5: '(2.0, 6.0]'},
'variable': {4: 'A',
5: 'A',
}})
df2 = pd.DataFrame({'A': [1,1,3]})
bins = df1[df1.variable.eq('A')].interval
new_series = pd.cut(df2['A'], bins=bins)
Run Code Online (Sandbox Code Playgroud)
但这带来了:
ValueError: could not convert string to float: '(-0.001, 2.0]'
Run Code Online (Sandbox Code Playgroud)
尝试过:
bins = bins.astype('interval')
Run Code Online (Sandbox Code Playgroud)
但这带来了:
TypeError: type <class 'str'> with value (-0.001, 2.0] is not an interval
Run Code Online (Sandbox Code Playgroud)
有什么我可以做的吗?谢谢
我正在尝试抓取这个网站:
\nhttps://noticias.caracoltv.com/colombia
\n最后你可以找到一个“Cargar M\xc3\xa1s”按钮,它会带来更多新闻。到目前为止,一切都很好。但是,当检查该元素时,它会加载一个像这样的链接:https://noticias.caracoltv.com/colombia?00000172-8578-d277-a9f3-f77bc3df0000-page=2
,如下所示:
问题是,如果我将其输入浏览器,我会得到与调用原始网站相同的消息。因此,我认为能够抓取网站的唯一方法是创建一个递归单击的脚本。问题是我需要 2019 年之前的新闻,所以这似乎不太可行。
\n另外,在检查事件侦听器时,我看到了以下内容:
\n\n但我不确定如何利用它来发挥我的优势。
\n我错过了什么吗?有什么方法可以通过链接访问较旧的新闻(或者 API 会更好,但我没有找到任何对 API 的调用)。
\n我目前正在使用 Python 进行抓取,但我正处于调查阶段,因此没有代码表明这是有意义的。\n非常感谢!
\n我有一个像这样的数据框:
stage1 stage2 stage3 stage4
a NA b c
NA d NA e
NA NA f g
NA NA NA h
Run Code Online (Sandbox Code Playgroud)
其中每一列都是流程的一个阶段。我想要做的是根据前面的列合并每一列:
stage1 stage2 stage3 stage4
a a a a
NA d d d
NA NA f f
NA NA NA h
Run Code Online (Sandbox Code Playgroud)
实际值并不重要,这也可能是一个逻辑数据帧,其中输出的每个字符串是TRUE
,每个 NA 是FALSE
。
我编写了这个函数,可以让我合并选择的列:
coacross <- function(...) {
coalesce(!!!across(...))
}
df <- df %>%
mutate(total_stages = coacross(everything()))
Run Code Online (Sandbox Code Playgroud)
这基本上创建了stage4
我想要的输出列。有什么方法可以迭代运行这个,最好没有 for 循环?stage2
那么我可以对和做同样的事情stage3
吗?否则,还有其他方法可以做到这一点吗?
多谢。
编辑:
这有效:
for(col in names(df %>% select(-stage1))){ …
Run Code Online (Sandbox Code Playgroud) 最近我一直试图映射一些值,所以我试图创建一个字典来做到这一点.奇怪的是我的DataFrame有一个由列表组成的列,而DataFrames总是有点笨拙的列表.DataFrame具有以下结构:
rules procedure
['10','11','12'] 1
['13','14'] 2
['20','21','22','24'] 3
Run Code Online (Sandbox Code Playgroud)
所以我想创建一个字典,将'10'映射到1,'14'映射到2,依此类推.我尝试了以下方法:
dicc=dict()
for j in df['rules']:
for i,k in zip(j,df.procedure):
dicc[i]=k
Run Code Online (Sandbox Code Playgroud)
但那不是成功的.可能与索引有关.我错过了什么?
编辑:我正在尝试创建一个将值'10','11','12'映射到1的字典; '13','14'到2; '20','21','22','24'到3,所以如果我打字dicc['10']
我得到1
,如果我输入dicc['22']
我得到3
.显然,实际的DataFrame非常大,我无法手动完成.
目前我正在处理不同主题的每周数据,但它可能有一些没有数据的长时间连续记录,所以,我想做的是保持每个id
. 我的数据如下所示:
id week
1 8
1 15
1 60
1 61
1 62
2 10
2 11
2 12
2 13
2 25
2 26
Run Code Online (Sandbox Code Playgroud)
我的预期输出是:
id week
1 60
1 61
1 62
2 10
2 11
2 12
2 13
Run Code Online (Sandbox Code Playgroud)
我有点接近,试图在week
==时用 1 标记week.shift()+1
。问题是这种方法不会标记连续发生的第一次,而且我也无法过滤最长的一次:
df.loc[ (df['id'] == df['id'].shift())&(df['week'] == df['week'].shift()+1),'streak']=1
Run Code Online (Sandbox Code Playgroud)
根据我的例子,这将带来:
id week streak
1 8 nan
1 15 nan
1 60 nan
1 61 1
1 62 1
2 10 nan …
Run Code Online (Sandbox Code Playgroud) 今天我正在处理一个图表,其中一部分有使用的注释plt.text
。在此注释中,我想写一些类似于“本月的价格是:USD$3 ”的内容
如果不加粗,则可以翻译成如下代码:
plt.text(0.5,0.9, f"The price for this month is: USD${df.price.iloc[-1]}")
Run Code Online (Sandbox Code Playgroud)
所以,我想做的就是USD${df.price.iloc[-1]}
在打印到图表时将其变为粗体。
SO 中有一个类似的问题,但对于标题,建议使用如下所示的符号:
"The price for this month is:' + r"$\bf{" + USD${df.price.iloc[-1]} + "}$"
Run Code Online (Sandbox Code Playgroud)
但该语法似乎无效,所以我不确定是否可能有一个包含粗体和非粗体部分的文本。
您知道是否可以做到,如果可以,如何做到?
python ×8
pandas ×5
dataframe ×2
r ×2
coalesce ×1
dictionary ×1
dplyr ×1
group-by ×1
html ×1
intervals ×1
matplotlib ×1
mysql ×1
nan ×1
postgresql ×1
text ×1
time-series ×1
web-scraping ×1