python - 如何正确使用python模块
问题描述
我的代码开始变得杂乱无章,所以我想为存储在其中的所有函数创建一个库(或我猜的模块)。在我的代码中工作的大多数函数在从模块导入它们时都会出现以下错误:
takes 1 positional argument but 2 were given
我创建了一个名为 mylib.py 的文件。
我放入其中的第一个函数,其中许多不起作用的是这个:
def load(hist_indicator, data):
mask1 = data['IndicatorName'].str.contains(hist_indicator)
dfdata = data[mask1]
filter = dfdata['Year'] > 1995
df = dfdata[filter]
return df
它所做的只是需要一个 pandas DataFrame 并过滤掉我需要的数据。如果该函数在代码本身中,则该函数可以工作。我这样使用它:
ind_internet = 'Internet users \(per 1'
internet = load(ind_internet, data)
但是,当我尝试从 mylib.py 使用它时,我得到了上述错误。尝试像这样使用它:
import mylib
ind_internet = 'Internet users \(per 1'
internet = mylib.load(ind_internet, data)
我希望你能让我知道我做错了什么。
编辑:
为了补充这个问题,这里有一个小例子的代码:
import pandas as pd
def load(hist_indicator, data):
mask1 = data['IndicatorName'].str.contains(hist_indicator)
dfdata = data[mask1]
filter = dfdata['Year'] > 1995
df = dfdata[filter]
return df
dataf = {'CountryName': ['France', 'Germany'],
'CountryCode': ['FRA', 'GER'],
'IndicatorName': ['Internet users (per 100)', 'GDP per capita (current US$)'],
'IndicatorCode' : ['MS.MIL.XPRT.KD','SP.POP.DPND.YG'],
'Year' : [2000,1983],
'Value' : [15.3,4322.27]
}
data = pd.DataFrame (dataf, columns = ['CountryName','CountryCode','IndicatorName','IndicatorCode','Year','Value'])
ind_internet = 'Internet users \(per 1'
internet = load(ind_internet, data)
internet
另外,一个编辑:我实际上并没有在代码中输入 import mylib.py ,只是在这里错误地输入了。
解决方案
问题:
导入行import mylib.py
不正确。您不需要文件扩展名.py
像这样的包的解决方案
设置:
package
|-mylib.py
|-test_import_mylip.py
然后在mylib.py
,
# package/mylib.py
def load(hist_indicator, data):
mask1 = data['IndicatorName'].str.contains(hist_indicator)
dfdata = data[mask1]
filter = dfdata['Year'] > 1995
df = dfdata[filter]
return df
然后导入并使用mylib.load
from test_import_mylib.py
,
# test_import_mylib.py
import mylib
import pandas as pd
data = pd.read_csv('path/to/df.csv')
ind_internet = 'Internet users \(per 1'
internet = mylib.load(ind_internet, data)
推荐阅读
- sql - 如何使用一对一选择两个关系表来创建视图,并用父值填充所有空值 - postgreSQL
- docker - 如何在 docker-machine 中使用本地镜像作为服务
- javascript - 带有反应钩子的多个计数器
- c# - 指定的字符串不是电子邮件地址所需的格式
- fonts - wxPython - 可以覆盖系统默认字体吗?
- sql - SUM CASE WHEN (SQL)
- xml - 如何在 SPARQL 查询语言中匹配 RDF 三元组中主题的相对 IRI?
- android - Android TransitionManager 下面的视图没有动画
- python - 如何在 docker 上的 Jenkins 中设置 PYTHONPATH
- c++ - C ++无法插入空向量