- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Python,我的数据集包含大约 100 万条记录和大约 50 列
其中一些列具有不同的类型(例如 IssueCode 列可以有 7000 个不同的代码,另一列 SolutionCode 可以有 1000 个代码)
我正在尝试建立一个预测模型。
因此我必须使用 get_dummies 转换数据
但这一直导致这个错误Memory Error
File "C:\Users\am\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 963, in _get_dummies_1d dummy_mat = np.eye(number_of_cols, dtype=dtype).take(codes, axis=0)
MemoryError
我尝试了另一种解决方案,即在不使用单热编码的情况下保留列
现在我在尝试构建模型时遇到此错误
ValueError: could not convert string to float: 'ABC'
我检查了这个解决方案
get_dummies python memory error
我把所有的列都转成int8了,还是一样的错误
df = pd.concat([df.drop('IssueCode', 1), pd.get_dummies(df['IssueCode'],prefix = 'IssueCode_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('SolutionCode', 1), pd.get_dummies(df['SolutionCode'],prefix = 'SolutionCode_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col1', 1), pd.get_dummies(df['Col1'],prefix = 'Col1_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col2', 1), pd.get_dummies(df['Col2'],prefix = 'Col2_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col3', 1), pd.get_dummies(df['Col3'],prefix = 'Col3_').astype(np.int8)], axis=1)
由于内存错误,我无法获取虚拟机,由于字符串 float 错误,我无法不获取虚拟机
如何解决这个问题
这是我的代码
from sklearn.model_selection import cross_val_predict
import pymssql
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
import datetime
import random
from sklearn.ensemble import RandomForestRegressor
pd.set_option('display.max_rows', 5000)
pd.set_option('display.max_columns', 5000)
pd.set_option('display.width', 10000)
TaskTime = 900
RunTime = 120
sFolder = "/mnt/c/temp/"
def Lead0(value):
return "0" + str(value) if value < 10 else str(value)
dNow = datetime.datetime.now()
sNow = Lead0(dNow.year) + Lead0(dNow.month) + Lead0(dNow.day) + Lead0(dNow.hour) + Lead0(dNow.minute) + Lead0(dNow.second)
print(sNow)
conn = pymssql.connect(server="MyServer", database="MyDB", port="1433", user="***", password="*****")
df = pd.read_sql("SELECT * FROM MyTable where MyDate between '1 jul 2018' and '30 jun 2019'", conn)
conn.close()
#df = pd.get_dummies(df)
#When I uncomment this I get Memory Error
mdl = RandomForestRegressor(n_estimators = 500)
y_pred = cross_val_predict(mdl, X, y, cv=5)
#This is causing error String to float
最佳答案
您可能想要做的第一件事是为数据框列指定适当的数据类型,以减少加载数据框的内存使用(参见 https://www.dataquest.io/blog/pandas-big-data/)。
至于单热编码,内存问题的一种直接解决方案是使用稀疏数据类型而不是常规数据类型(有关更多详细信息,请参见 doc)。这可以通过这样的事情来实现:
df = pd.get_dummies(df, columns=["IssueCode", "SolutionCode", "Col1", "Col2", "Col3"],
sparse=True, axis=1)
不过,我不确定 pandas
的稀疏表示是否适用于 sklearn
。如果它不起作用,您可以尝试使用 sklearn
的 OneHotEncoder ,默认情况下还提供稀疏表示。
还有其他分类特征的编码技术可以减少维度(以及内存使用)但需要更多的工作,例如将分类特征的值合并到更大的组中。
关于python - 如何解决由 Get_dummies 引起的内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57487750/
在使用 get_dummies() 将分类数据转换为数字数据后,我的数据框看起来像这样 score1 score2 country_CN country _AU category_leader ca
我有需要应用单热编码的标记数据:'786.2', 'ICD-9-CM|786.2', ' ICD-9-CM', '786.2b|V13.02', 'V13.02', '279.12' , 'ICD-9
在包含有关文本文件中字符串信息的字典中,其中键是字符串,值是文件名。 Dict1 = {'str1A':'file1', 'str1B':'file1', 'str1C':'file1', 'str1
我需要对 userId X movieId 进行分类,我有两列:userId 和 movieId。 userId movieId 60265 2123 60265 2291 60265
我在处理包含 400,000 行和 300 个变量的数据集时遇到问题。我必须为包含 3,000 多个不同项目的分类变量获取虚拟变量。最后,我想得到一个包含 3,300 个变量或特征的数据集,以便我可以
我有一个具有以下架构的 pyspark 数据框: Key1Key2Key3值一个一个一个"value1"一个一个一个"value2"一个一个b"value1"bb一个"value2" (在现实生活中这
我正在研究一个数据集,它有一个称为类别的功能。该特征中每个观察的数据由分号分隔的列表组成,例如。 行 类别 第 1 行 "categorya;categoryb;categoryc" 第 2 行 “类
我正在努力为我的数据框创建虚拟列。 这是我的原始数据框: df = pd.DataFrame({'id': ['01', '02', '03'], 'Q1':
使用以下数据框: >>> df = pd.DataFrame(data={'category':['a','b','c'],'val':[1,2,3]}) >>> df category val
所以本质上我有一个包含一堆列的数据框,其中一些我想保留(存储在 to_keep 中),还有一些其他列我想使用 pandas.get_dummies 创建分类变量(这些列存储在 to_change 中)
我正在使用 pandas 系列并尝试将其转换为一种热门编码。我使用 describe 方法来检查该系列有多少个独特的类别。输出为: input['pattern'].describe(include=
我有一个 Pandas DataFrame,df。它由数字变量和分类变量组成,其中包含 NaN/NULL 值。要继续进行数据预处理,我必须对 calcategori 变量进行 one-hot 编码,并
我正在制作一个简单的可重现示例来了解培训和测试的工作原理: 示例 我想根据原产地位置预测年龄: import pandas as pd # create a simple dataset of peo
我有这个数据框: column1 column2 column3 column4 0 A A D D 1 B
这个问题已经有答案了: Dummy variables when not all categories are present (10 个回答) 已关闭 5 年前。 使用 get_dummies 方法
你好,有一个包含分类变量的 Pandas 数据框 df。 df=pandas.DataFrame(data=[['male','blue'],['female','brown'], ['male','
我有一个如下所示的数据框。 Mfr Number 列是分类数据类型。我想对其执行 get_dummies 或一种热编码,但如果它来自该行,我不想用 1 填充新列,而是希望它填充 数量列。所有其他新的“
我有一个 Pandas DataFrame,train,我是单热编码。它看起来像这样: car 0 Mazda 1 BMW 2 Honda 如果我使用 pd.get_dummies
(已编辑:我刚刚意识到我想问一个无法回答但不确定如何删除这个问题的问题...请忽略或建议我如何删除。我想我需要考虑一个不同的解决这个问题的方法。) ******--------------------
我希望利用 pandas get_dummy() 功能来编码一组(相当广泛的)分类变量。但是,数据当前采用嵌套表格格式。这意味着每一行代表另一个变量实例,例如 Instance, Cat_Col 1,
我是一名优秀的程序员,十分优秀!