问题
假设我有这个模块名为custom_module:
class CustomClass:
pass
Run Code Online (Sandbox Code Playgroud)
我在脚本中使用此类来序列化我在以下位置定义的类的对象custom_module:
import cloudpickle
import custom_module as cm
custom_object = cm.CustomClass()
with open('filename.pkl', 'wb') as file:
cloudpickle.dump(custom_object, file)
Run Code Online (Sandbox Code Playgroud)
我将此 pickle 文件复制到另一个环境并使用另一个脚本加载它:
import cloudpickle
with open('filename.pkl', 'rb') as file:
custom_object = cloudpickle.load(file)
Run Code Online (Sandbox Code Playgroud)
这会产生这个错误:
Traceback (most recent call last):
File "loader.py", line 4, in <module>
custom_object = cloudpickle.load(file)
ModuleNotFoundError: No module named 'custom_module'
Run Code Online (Sandbox Code Playgroud)
尴尬的解决方案
作为解决方法,可以读取并执行custom_module脚本中的所有内容:
exec(open(path.join('custom_module.py')).read())
Run Code Online (Sandbox Code Playgroud)
但这看起来真的很奇怪,我不能使用 CustomClass 作为cm.CustomClass. 是否有其他解决方案不涉及将第一个环境中的所有代码复制到第二个环境中?
我试图序列化一个大的python对象,由一个使用pickle/cPickle和gzip的numpy数组组成.该过程适用于一定大小的数据,之后我收到以下错误:
--> 121 cPickle.dump(dataset_pickle, f)
***/gzip.pyc in write(self, data)
238 print(type(self.crc))
239 print(self.crc)
--> 240 self.crc = zlib.crc32(data, self.crc) & 0xffffffffL
241 self.fileobj.write( self.compress.compress(data) )
OverflowError: size does not fit in an int
Run Code Online (Sandbox Code Playgroud)
numpy数组的大小约为1.5 GB,发送到zlib.crc32的字符串超过2 GB.我正在使用64位机器,我的Python也是64位
>>> import sys
>>> sys.maxsize
9223372036854775807
Run Code Online (Sandbox Code Playgroud)
这是python的错误还是我做错了什么?压缩和序列化numpy数组有什么好的选择吗?我现在正在看 numpy.savez,PyTables和HDF5,但是知道为什么我遇到这个问题会很好,因为我有足够的内存
更新:我记得在某个地方读到这可能是因为使用了旧版本的Numpy(我当时),但我完全切换到numpy.save/savez而不是cPickle(至少在我的情况下)
我想将一些DataFrame导出到LaTeX,但这些DataFrame有很多列,但没有那么多项.解决方案是显示转置的表格.我知道pandas的转置,但我想格式化我的行,方法to_latex只支持按列格式化.
一些代码:
import pandas as pd
names = ['Bob','Jessica','Mary','John','Mel']
births = [968, 155, 77, 578, 973]
tralala = [0.1, 0.2, 0.3, 0.4, 0.5]
BabyDataSet = zip(names,births,tralala)
df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births', 'Whatever'])
df = df.transpose()
print df.to_latex()
Run Code Online (Sandbox Code Playgroud)
输出:
\begin{tabular}{llllll}
\toprule
{} & 0 & 1 & 2 & 3 & 4 \\
\midrule
Names & Bob & Jessica & Mary & John & Mel \\
Births & 968 & 155 & 77 & 578 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Packrat 为我的 R 项目设置一个 git 工作流程。每次packrat::snapshot()我的工作区,文件都会packrat.lock随着新的包/版本等而改变,但它也会改变每个包的哈希行,这在检查文件差异以查看从一个提交到另一个提交的变化时有点烦人。
这个Hash真的有必要吗?如果没有,有什么办法可以禁用它吗?
假设我有一个包含数十或数百列的CSV,我想提取大约2或3列.我知道这里colClasses描述的解决方案,但代码变得非常难以理解.
我想是usecols从熊猫read_csv.
加载所有内容并在之后选择不是一个解决方案(文件超大,它不适合内存).
在Gremlin-Groovy中,给定一个TinkerVertex对象,检索与其属性中的键对应的值的最清晰/最快的方法是什么,如果不存在则返回默认值(例如null)?
这就是我目前的做法:
def eval(vertex, field) {
prop = vertex.property(field)
prop.isPresent() ? prop.value() : null
}
Run Code Online (Sandbox Code Playgroud)
当顶点没有所需的字段时会vertex.property(field).value()产生异常,所以我不得不添加该条件.
即使它有点短,这个操作一直都在进行,这让我感到困惑,因为我还没有找到更多的"gremlinish"解决方案.
我正在加载一个 Excel 文件,其中有一列日期存储为整数(例如 43000 是 2017-09-22)。我尝试以这种方式应用这个问题的答案:
df = df %>%
mutate(date = as.Date(date, origin = "1899-12-30"))
Run Code Online (Sandbox Code Playgroud)
但我有以下错误:
Error in mutate_impl(.data, dots) : Evaluation error: character string is not in a
standard unambiguous format. Calls: (...)
Run Code Online (Sandbox Code Playgroud)
我搜索了这个问题,所有结果都是关于错误地指定字符串输入as.Date,但在这种情况下输入是整数。
我正在rmarkdown::render外面使用RStudio来编织.pdf文档.这工作正常,但它留下了.tex我不想要的中间文件.我已经在使用该clear = TRUE选项了rmarkdown::render.我不知道RStudio做了什么,但是.tex当我从IDE编写文档时它确实清除了文件.