【发布时间】:2017-08-04 09:25:17
【问题描述】:
在 pandas 中,许多函数采用一长串可选参数,每个参数都有一个默认值。
如果我想在整个项目或至少在整个 py 文件中重新定义默认值,是否有一种简单的方法可以做到这一点?
例如read_csv() 默认为encoding=None,但我希望每次调用read_csv() 都默认为UTF-8 编码。
我知道我可以包装函数,但是通过单独的自定义导入来调用 Pandas 感觉很难看。另外,其他开发者无疑会重新使用read_csv()。
我知道我可以编辑 pandas 源代码,但在保持兼容性方面这是一个非常糟糕的主意。
最后显然我可以更新每个read_csv() 调用以单独设置编码,但是在我正在处理的项目中它们有很多,而且正则表达式会很棘手,因为可能其他可选的非位置参数。此外,这也无助于阻止未来的开发人员重复同样的问题。
有什么想法吗?
编辑:
MedAli 的答案在文件范围内效果很好。
我一直试图让它在目录范围内工作(我使用的是 Python 2.7):
我相信 如果 pandas 在标准库中,从标准库导入内容时忽略本地文件很容易:
from __future__ import absolute_import
而且这个看起来很狡猾的黑客也不起作用:
import sys
syspath = sys.path
new_syspath = [path for path in sys.path if path.strip('.')]
sys.path = new_syspath
import pandas
sys.path = syspath
我知道弄乱 sys.path 是个坏主意,尽管因为我实际上是在尝试完全按照设计践踏 pandas,所以至少一些常见的问题不适用。
加上下面的 cmets - 作为进行数百次搜索/替换之前的测试用例,我认为找到一种方法来屏蔽库而不更改代码是有效的......如果它有效,那么采用不那么 hacky 的解决方案。
它开始看起来不可行,即使使用黑客,谁能证明我错了?
第二次编辑:
我相当肯定你不能做我在第一次编辑中提出的问题,所以我接受了文件范围答案作为你在 Python 中可以做的最好的事情。
在进行测试运行方面,我认为最简单的做法是在应用文件范围级别修复之前临时更改 panadas 中的 parser.py。
如果有人不这么认为,我仍然感兴趣!
【问题讨论】:
-
没有万无一失的方法不能解决。我只是定义你自己的包装器并让它知道它将
encoding参数设置为默认为'utf-8'并保留它。
标签: python python-2.7 pandas python-import