对于使用executemany感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解插入行时,“参数类型无效”,并且为您提供关于.netInt16、(intInt32)、Int64的区别、Anov
对于使用executemany感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解插入行时,“参数类型无效”,并且为您提供关于.net Int16 、(int Int32)、 Int64 的区别、Anova 的 Rpart 错误:`!isord 中的错误:参数类型无效`、AttributeError: 'numpy.int64' 对象没有属性 '_get_object_id'、AttributeError:“ numpy.int64”对象没有属性“ to_pydatetime”的宝贵知识。
本文目录一览:- 使用executemany()插入行时,“参数类型无效”(numpy.int64)
- .net Int16 、(int Int32)、 Int64 的区别
- Anova 的 Rpart 错误:`!isord 中的错误:参数类型无效`
- AttributeError: 'numpy.int64' 对象没有属性 '_get_object_id'
- AttributeError:“ numpy.int64”对象没有属性“ to_pydatetime”
使用executemany()插入行时,“参数类型无效”(numpy.int64)
我尝试将一堆数据插入数据库
insert_list = [(1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3),....] #up to 10000 tuples in this listconn = pyodbc.connect(''DRIVER={FreeTDS};SERVER=xxxxx;DATABASE=xxxx;UID=xx;PWD=xx;TDS_Version=7.0'')cursor = conn.cursor()sql = "insert into ScanEMAxEMAHistoryDay(SecurityNumber, EMA1, EMA2, CrossType, DayCross, IsLocalMinMax) values (?, ?, ?, ?, ?, ?)"cursor.executemany(sql, insert_list)
cursor.executemany(sql,insert_list)
pyodbc.ProgrammingError:(’无效的参数类型.param-index = 4 param-type =
numpy.int64’,’HY105’)
减少到100个元组:
cursor.executemany(sql, insert_list[:100])
cursor.executemany(sql,insert_list [:100])
pyodbc.ProgrammingError:(’无效的参数类型.param-index = 4 param-type =
numpy.int64’,’HY105’)cursor.executemany(sql,insert_list [:100])
减少到5个元组:
cursor.executemany(sql, insert_list[:5])conn.commit()
这可以插入数据库
我尝试:
sql = ''SET GLOBAL max_allowed_packet=50*1024*1024''cursor.execute(sql)
在excutemany()之前,但是有一个错误:
pyodbc.ProgrammingError :(“ 42000”,“ [42000] [FreeTDS] [SQL Server]“
GLOBAL”不是公认的SET选项。(195)(SQLExecDirectW)”)
我如何解决这个问题。
谢谢。
答案1
小编典典您的问题不在于数据 量本身 ,而是某些元组包含numpy.int64
不能直接用作SQL语句的参数值的值。例如,
a = numpy.array([10, 11, 12], dtype=numpy.int64)params = (1, 1, a[1], 1, 1, 1)crsr.execute(sql, params)
会抛出
ProgrammingError :(“参数类型无效。param-index= 2 param-type = numpy.int64’,’HY105’)
因为第三个参数值是numpy.int64
numpy数组中的元素a
。使用转换该值int()
将避免出现以下问题:
a = numpy.array([10, 11, 12], dtype=numpy.int64)params = (1, 1, int(a[1]), 1, 1, 1)crsr.execute(sql, params)
顺便说一下
sql = ''SET GLOBAL max_allowed_packet=50*1024*1024''cursor.execute(sql)
没用的是,这max_allowed_packet
是一个MySQL设置,对Microsoft SQL Server没有任何意义。
.net Int16 、(int Int32)、 Int64 的区别
.net Int16 、(int Int32)、 Int64 的区别
easonjim 2015-09-25 01:41:00 浏览 129 评论 0
- Framework
- html
- 存储
- 数据类型
摘要: 关于什么是 16 位整数,32 位整数,64 位整数,请看这里:http://www.cnblogs.com/EasonJim/p/4837061.html Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数。
关于什么是 16 位整数,32 位整数,64 位整数,请看这里:http://www.cnblogs.com/EasonJim/p/4837061.html
Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数。
Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数。
Int64 值类型表示值介于 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之间的整数。
----------------------------------------------------------------------------------------------------------------------------
short 关键字表示一种整数数据类型,该类型根据下表显示的大小和范围存储值。
类型 | 范围 | 大小 | .NET Framework 类型 |
---|---|---|---|
short |
-32,768 到 32,767 |
有符号 16 位整数 |
System.Int16 |
----------------------------------------------------------------------------------------------------------------------------
int 关键字表示一种整型,该类型根据下表显示的大小和范围存储值。
类型 | 范围 | 大小 | .NET Framework 类型 |
---|---|---|---|
int |
-2,147,483,648 到 2,147,483,647 |
有符号 32 位整数 |
System.Int32 |
----------------------------------------------------------------------------------------------------------------------------
long 关键字表示一种整型,该类型根据下表显示的大小和范围存储值。
类型 | 范围 | 大小 | .NET Framework 类型 |
---|---|---|---|
long |
-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
有符号 64 位整数 |
System.Int64 |
==> 如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==
Anova 的 Rpart 错误:`!isord 中的错误:参数类型无效`
如何解决Anova 的 Rpart 错误:`!isord 中的错误:参数类型无效`
我正在运行下面的代码来调用 rpart 函数,但它一直给我错误 Error in !isord : invalid argument type
# set arguments for rpart function
group.target.metric <- "loan_amount"
group.data.variables <- c(data.config$dict[is_group == TRUE,variable_name_modeling],group.target.metric)
print(group.data.variables)
group.training.data <- complete.data[,..group.data.variables]
# run main code
group.tree <- rpart(formula = paste(group.target.metric,"~." ),data = group.training.data,method = "anova")
谁能指导一下这可能是什么?
我使用的 Rpart 版本是 4.1-15
解决方法
问题是在创建 data.config$dict
时,我在模型中使用的一个变量缺少定义/数据类型。要检查和更新 complete.data
表中的数据类型,请使用查询:
complete.data <- UpdateDataTypes(complete.data,data.config$dict)
AttributeError: 'numpy.int64' 对象没有属性 '_get_object_id'
如何解决AttributeError: ''numpy.int64'' 对象没有属性 ''_get_object_id''
我在 pyspark 中有一个数据集,我为其创建了一个 row_num 列,因此我的数据如下所示:
#data:
+-----------------+-----------------+-----+------------------+-------+
|F1_imputed |F2_imputed |label| features|row_num|
+-----------------+-----------------+-----+------------------+-------+
| -0.002353| 0.9762| 0|[-0.002353,0.9762]| 1|
| 0.1265| 0.1176| 0| [0.1265,0.1176]| 2|
| -0.08637| 0.06524| 0|[-0.08637,0.06524]| 3|
| -0.1428| 0.4705| 0| [-0.1428,0.4705]| 4|
| -0.1015| 0.6811| 0| [-0.1015,0.6811]| 5|
| -0.01146| 0.8273| 0| [-0.01146,0.8273]| 6|
| 0.0853| 0.2525| 0| [0.0853,0.2525]| 7|
| 0.2186| 0.2725| 0| [0.2186,0.2725]| 8|
| -0.145| 0.3592| 0| [-0.145,0.3592]| 9|
| -0.1176| 0.4225| 0| [-0.1176,0.4225]| 10|
+-----------------+-----------------+-----+------------------+-------+
我正在尝试使用以下方法过滤掉随机选择的行:
count = data.count()
sample = [np.random.choice(np.arange(count),replace=True,size=50)]
filtered = data.filter(data.row_num.isin(sample))
但是第二行报错:
AttributeError: ''numpy.int64'' object has no attribute ''_get_object_id''
这是什么原因造成的?我使用相同的过滤代码通过 label
(一和零的二进制列)溢出行,这确实有效,但现在重新应用代码不适用于采样
解决方法
Numpy 数据类型不能与 Spark 很好地交互。您可以在调用 .tolist()
之前使用 .isin
将它们转换为 Python 数据类型:
sample = np.random.choice(np.arange(count),replace=True,size=50).tolist()
AttributeError:“ numpy.int64”对象没有属性“ to_pydatetime”
如何解决AttributeError:“ numpy.int64”对象没有属性“ to_pydatetime”
我是Python的新手。我已经开始使用pyfolio库,并且在键入以下代码后
pf.create_returns_tear_sheet(data[''New_Adjusted_Returns''],benchmark_rets=None)
发生一个名为的错误,如下所示:
AttributeError: ''numpy.int64'' object has no attribute ''to_pydatetime''
data [''New_Adjusted_Returns'']由以下数据组成:
Date
2020-02-14 -0.004500
2020-02-17 -0.022107
2020-02-18 -0.000029
2020-02-19 -0.000800
2020-02-20 -0.017102
2020-02-21 -0.000028
2020-02-24 0.014400
2020-02-25 0.007900
2020-02-26 -0.001000
2020-02-27 -0.000517
2020-02-28 -0.000029
Would someone be able to help me on this issue? Thank you very much.
解决方法
从错误信息中检索错误代码文件,例如:
!cat /usr/local/lib/python3.7/site-packages/pyfolio/timeseries.py
将输出复制到notepade++,并将涉及*.to_pydatetime()的第1005、1008和1015行表达式替换为
pd.to_datetime(peak)
pd.to_datetime(valley
pd.to_datetime(recovery)
分别。
将修改后的内容复制到以
开头的单元格%%writefile /usr/local/lib/python3.7/site-packages/pyfolio/timeseries.py
并执行它以覆盖原始文件。
然后在重新运行导致此错误的 pf.create_full_tear_sheet(data) 之前执行以下操作:
%load_ext autoreload
%autoreload 2
,
通过更改文件timeseries.py中的893行来解决此问题
valley = underwater.index[np.argmin(underwater)] # end of the period
,
我 pip 安装了 pyfolio 并且遇到了同样的错误。
经过一番挖掘,我发现了这个功能:
def get_max_drawdown_underwater(underwater):
...
并且山谷变量定义不明确,导致返回的变量类型为 nump.int64 而不是函数描述中所述的时间戳。
vallay = underwater.index[np.argmin(underwater)] # np.argmin(underwater)
白色的是我写的,注释掉的是我从 pip 安装中得到的。
现在显示所有指标和图表:
我在华为笔记本电脑上遇到了同样的问题,但在我的 Surface 上没问题。 我通过以下更正解决了这个问题。
在第 894 行,替换
valley = np.argmin(underwater)
与
valley=underwater.index[np.argmin(underwater)]
在第 897 行,替换
peak=valley = np.argmin(underwater)
与
temp1=underwater[:valley][underwater[:valley] == 0].dropna(axis=0,how=''any'')
peak = temp1.index[-1]
在第 901 行,替换
recovery=underwater[valley:][underwater[valley:] == 0]
与
temp2=underwater[valley:][underwater[valley:] == 0].dropna(axis=0,how=''any'')
recovery = temp2.index[0]
#####################
如果应用上述解决方案后 to_pydatetime
仍然存在错误,您可以在第 1010、1013 和 1018 行将 .to_pydatetime().strftime(''%Y-%m-%d''))
替换为 .strftime(''%Y-%m-%d''))
。
关于使用executemany和插入行时,“参数类型无效”的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.net Int16 、(int Int32)、 Int64 的区别、Anova 的 Rpart 错误:`!isord 中的错误:参数类型无效`、AttributeError: 'numpy.int64' 对象没有属性 '_get_object_id'、AttributeError:“ numpy.int64”对象没有属性“ to_pydatetime”的相关信息,请在本站寻找。
本文标签: