两个快速的熊猫问题供您选择。
我有一个要应用过滤器的数据框列表。
countries = [us, uk, france]
for df in countries:
df = df[(df["Send Date"] > '2016-11-01') & (df["Send Date"] < '2016-11-30')]
Run Code Online (Sandbox Code Playgroud)
当我运行它时,df之后不会更改。这是为什么?如果我遍历数据帧以创建一个新列,如下所示,则可以正常工作,并更改列表中的每个df。
for df in countries:
df["Continent"] = "Europe"
Run Code Online (Sandbox Code Playgroud)作为后续问题,当我创建不同国家的数据框列表时,我注意到了一些奇怪的事情。我定义了列表,然后将转换应用于列表中的每个df。在转换了这些不同的dfs之后,我再次调用了该列表。我很惊讶地看到列表仍然指向未更改的数据帧,因此我不得不重新定义列表以更新结果。有人能解释为什么会这样吗?
我有一个加泰罗尼亚数字的递归代码.我设法写了递归调用,但由于某种原因,计数器无法正常工作.例如,第7个加泰罗尼亚语号码的呼叫数量应为1215.返回值必须是加泰罗尼亚语号码和呼叫数量的元组,例如:(429,1215).原始代码:
def catalan_rec(n):
if n<=1:
return 1
res=0
for i in range(n):
res+=catalan_rec(i)*catalan_rec(n-i-1)
return res
Run Code Online (Sandbox Code Playgroud)
柜台代码:
def catalan_rec_count(n,counter=1):
if n<=1:
return 1
res=0
for i in range(n):
res+=catalan_rec_count(i,counter+1)*catalan_rec_count(n-i-1,counter+1)
return (res,counter)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我有一个在 gcc 4.8.4 下构建良好的项目。我尝试使用 gcc 7 构建,并注意到很多-Wimplicit-fallthrough=警告。据我所知,这确实是在 gcc 版本 7 中添加的。我现在-Wno-implicit-fallthrough在构建时使用以抑制这些警告。移动回旧版本的gcc,保持-Wno-implicit-fallthrough编译器标志并不会导致任何错误,即使我不相信GCC 4识别此选项。怎么来的?特别是-Wno-允许不被识别的选项吗?
实际上我不知道普通指针和const指针有什么区别,如果我使用下面的代码,它将正常工作.但是当我改变const到 int *ptr=#那时它将无法工作.谁能解释普通指针和const指针之间的区别?
int main(void)
{
int num = 20;
int *ptr = &num ; // if i change to `int *const ptr = &var1;` then it shows some error
*ptr = 20 ; // Valid
ptr ++ ; // valid
return 0;
}
Run Code Online (Sandbox Code Playgroud) 敬启者,
我的代码错误有什么不对?
>>> import json
>>> array = json.load({"name":"Galen","learning objective":"load json files for data analysis"})
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
array = json.load({"name":"Galen","learning objective":"load json files for data analysis"})
File "C:\Python34\lib\json\__init__.py", line 265, in load
return loads(fp.read(),
AttributeError: 'dict' object has no attribute 'read'
Run Code Online (Sandbox Code Playgroud) 在编写Python 3代码时,我在变量名中使用Unicode文字使我很高兴。今天我有一个奇怪的错误,原来是由于Python无法区分变量?和?,如下面的短代码所示:
? = 'hello'
? = 'goodbye'
print(?) # Prints 'goodbye'
Run Code Online (Sandbox Code Playgroud)
这是错误还是功能?如果是后者,我如何/在哪里可以找到以这种方式一起属于所有这些字符的集合?
在?和?在字符串中使用时,不存在这种区别:
a = '?'
b = '?'
print(a == b) # Prints False
Run Code Online (Sandbox Code Playgroud)
这使我确信这不是我的编辑器/终端的编码问题。
我们还可以使用以下unicodedata模块来确认Python完全了解我们正在处理的字符:
import unicodedata
print(unicodedata.name('?')) # Prints 'GREEK SMALL LETTER RHO'
print(unicodedata.name('?')) # Prints 'GREEK RHO SYMBOL'
Run Code Online (Sandbox Code Playgroud)
我在?(GREEK SMALL LETTER PHI)和?(GREEK PHI SYMBOL)之间发现了相同的行为。
在Python> = 3.6中,f-strings可以用作方法的替代品str.format.举个简单的例子,它们是等价的:
'{} {}'.format(2+2, "hey")
f'{2+2} {"hey"}'
Run Code Online (Sandbox Code Playgroud)
忽略格式说明符,我基本上可以str.format在f字符串中移动内部大括号的位置参数.请特别注意,我可以将str文字放在这里,虽然看起来有点笨拙.
但是有一些限制.具体来说,任何形状或形式的反斜杠都不允许在f字符串的大括号内:
'{}'.format("new\nline") # legal
f'{"new\nline"}' # illegal
f'{"\\"}' # illegal
Run Code Online (Sandbox Code Playgroud)
\如果它在支架内,我甚至不能用它来分开一条长线;
f'{2+\
2}' # illegal
Run Code Online (Sandbox Code Playgroud)
即使\在正常情况下完全允许这种用法str;
'{\
}'.format(2+2) # legal
Run Code Online (Sandbox Code Playgroud)
在我看来,如果它\在f字符串的大括号内完全看到字符,则会将硬停止编码到解析器中.为什么要实施此限制?虽然文档指定了这种行为,但它并不能证明原因.
我有一个循环加载并绘制一些数据,如下所示:
import os
import numpy as np
import matplotlib.pyplot as plt
for filename in filenames:
plt.figure()
if os.path.exists(filename):
x, y = np.loadtxt(filename, unpack=True)
plt.plot(x, y)
plt.savefig(filename + '.png')
plt.close()
Run Code Online (Sandbox Code Playgroud)
现在,如果文件不存在,则不会加载或绘制数据,但仍会保存(空)图。在上面的例子中,我可以简单地通过plt在if语句中包含所有调用来纠正这个问题。我的实际用例涉及更多,所以我正在寻找一种方法来询问matplotlib/ plt/图形/轴 图形/轴是否完全为空。就像是
for filename in filenames:
plt.figure()
if os.path.exists(filename):
x, y = np.loadtxt(filename, unpack=True)
plt.plot(x, y)
if not plt.figure_empty(): # <-- new line
plt.savefig(filename + '.png')
plt.close()
Run Code Online (Sandbox Code Playgroud) 我正在使用Python的argparse模块来解析命令行参数。考虑下面的简化示例,
# File test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s', action='store')
parser.add_argument('-a', action='append')
args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)
可以成功地称为
python test.py -s foo -a bar -a baz
Run Code Online (Sandbox Code Playgroud)
每个参数-s前后都需要一个参数-a,如果使用引号,则参数可以包含空格。但是,如果参数以破折号(-)开头且不包含任何空格,则代码将崩溃:
python test.py -s -begins-with-dash -a bar -a baz
Run Code Online (Sandbox Code Playgroud)
错误:参数-s:预期一个参数
我知道它被解释-begins-with-dash为新选项的开始,这是非法的,因为-s尚未收到其必需的参数。尽管-begins-with-dash还没有定义带有名称的选项,但也很清楚,因此它不应该首先将其解释为选项。如何使argparse一个或多个前导破折号接受参数?
python ×7
python-3.x ×4
argparse ×1
attributes ×1
backslash ×1
c ×1
f-string ×1
fall-through ×1
figure ×1
gcc ×1
gcc-warning ×1
html ×1
json ×1
linux ×1
list ×1
matplotlib ×1
pandas ×1
parsing ×1
pointers ×1
recursion ×1
unicode ×1