GVKun编程网logo

使用executemany()插入行时,“参数类型无效”(numpy.int64)

2

对于使用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)

使用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.int64numpy数组中的元素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 的区别

.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 中的错误:参数类型无效`

如何解决Anova 的 Rpart 错误:`!isord 中的错误:参数类型无效`

我正在运行下面的代码来调用 rpart 函数,但它一直给我错误 Error in !isord : invalid argument type

  1. # set arguments for rpart function
  2. group.target.metric <- "loan_amount"
  3. group.data.variables <- c(data.config$dict[is_group == TRUE,variable_name_modeling],group.target.metric)
  4. print(group.data.variables)
  5. group.training.data <- complete.data[,..group.data.variables]
  6. # run main code
  7. group.tree <- rpart(formula = paste(group.target.metric,"~." ),data = group.training.data,method = "anova")

谁能指导一下这可能是什么?

我使用的 Rpart 版本是 4.1-15

解决方法

问题是在创建 data.config$dict 时,我在模型中使用的一个变量缺少定义/数据类型。要检查和更新 complete.data 表中的数据类型,请使用查询:

  1. complete.data <- UpdateDataTypes(complete.data,data.config$dict)

AttributeError: 'numpy.int64' 对象没有属性 '_get_object_id'

AttributeError: 'numpy.int64' 对象没有属性 '_get_object_id'

如何解决AttributeError: ''numpy.int64'' 对象没有属性 ''_get_object_id''

我在 pyspark 中有一个数据集,我为其创建了一个 row_num 列,因此我的数据如下所示:

  1. #data:
  2. +-----------------+-----------------+-----+------------------+-------+
  3. |F1_imputed |F2_imputed |label| features|row_num|
  4. +-----------------+-----------------+-----+------------------+-------+
  5. | -0.002353| 0.9762| 0|[-0.002353,0.9762]| 1|
  6. | 0.1265| 0.1176| 0| [0.1265,0.1176]| 2|
  7. | -0.08637| 0.06524| 0|[-0.08637,0.06524]| 3|
  8. | -0.1428| 0.4705| 0| [-0.1428,0.4705]| 4|
  9. | -0.1015| 0.6811| 0| [-0.1015,0.6811]| 5|
  10. | -0.01146| 0.8273| 0| [-0.01146,0.8273]| 6|
  11. | 0.0853| 0.2525| 0| [0.0853,0.2525]| 7|
  12. | 0.2186| 0.2725| 0| [0.2186,0.2725]| 8|
  13. | -0.145| 0.3592| 0| [-0.145,0.3592]| 9|
  14. | -0.1176| 0.4225| 0| [-0.1176,0.4225]| 10|
  15. +-----------------+-----------------+-----+------------------+-------+

我正在尝试使用以下方法过滤掉随机选择的行:

  1. count = data.count()
  2. sample = [np.random.choice(np.arange(count),replace=True,size=50)]
  3. filtered = data.filter(data.row_num.isin(sample))

但是第二行报错:

  1. AttributeError: ''numpy.int64'' object has no attribute ''_get_object_id''

这是什么原因造成的?我使用相同的过滤代码通过 label(一和零的二进制列)溢出行,这确实有效,但现在重新应用代码不适用于采样

解决方法

Numpy 数据类型不能与 Spark 很好地交互。您可以在调用 .tolist() 之前使用 .isin 将它们转换为 Python 数据类型:

  1. sample = np.random.choice(np.arange(count),replace=True,size=50).tolist()

AttributeError:“ numpy.int64”对象没有属性“ to_pydatetime”

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 安装中得到的。

现在显示所有指标和图表:

figure output

,

我在华为笔记本电脑上遇到了同样的问题,但在我的 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”的相关信息,请在本站寻找。

本文标签: