-
2021-04-21 06:57:55
我将一些日内库存数据保存到MySQL表中,如下所示:
+----------+-------+
| tick | quote |
+----------+-------+
| 08:00:10 | 5778 |
| 08:00:11 | 5776 |
| 08:00:12 | 5778 |
| 08:00:13 | 5778 |
| 08:00:14 | NULL |
| 08:00:15 | NULL |
| 08:00:16 | 5779 |
| 08:00:17 | 5778 |
| 08:00:18 | 5780 |
| 08:00:19 | NULL |
| 08:00:20 | 5781 |
| 08:00:21 | 5779 |
| 08:00:22 | 5779 |
| 08:00:23 | 5779 |
| 08:00:24 | 5778 |
| 08:00:25 | 5779 |
| 08:00:26 | 5777 |
| 08:00:27 | NULL |
| 08:00:28 | NULL |
| 08:00:29 | 5776 |
+----------+-------+
如您所见,有些点没有数据可用(引用为NULL).我想做的是一个简单的步骤插值.这意味着应使用最后一个可用值更新每个NULL值.我设法做到这一点的唯一方法是使用游标,由于数据量很大,游标很慢.我基本上是在搜索这样的东西:
UPDATE table AS t1
SET quote = (SELECT quote FROM table AS t2
WHERE t2.tick < t1.tick AND
t2.quote IS NOT NULL
ORDER BY t2.tick DESC
LIMIT 1)
WHERE quote IS NULL
当然这个查询不起作用,但它应该是这样的.
如果没有游标和临时表,我会很感激如何解决这个问题.
解决方法:
这应该工作:
SET @prev = NULL;
UPDATE ticks
SET quote= @prev := coalesce(quote, @prev)
ORDER BY tick;
BTW同样的技巧适用于阅读:
SELECT t.tick, @prev := coalesce(t.quote, @prev)
FROM ticks t
JOIN (SELECT @prev:=NULL) as x -- initializes @prev
ORDER BY tick
标签:mysql
来源: https://codeday.me/bug/20190621/1253315.html
更多相关内容 -
数据处理之缺失值的处理
2021-03-04 05:31:08目录缺失值产生的原因机械原因:由于机械原因导致的数据收集或保存的失败造成的数据缺失,如收集车流量数据的地感线圈损坏等人为原因:由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人...目录
缺失值产生的原因
机械原因:由于机械原因导致的数据收集或保存的失败造成的数据缺失,如收集车流量数据的地感线圈损坏等
人为原因:由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据等
完全变量与不完全变量
数据集中不含缺失值的变量(属性)称为完全变量,数据集中含有缺失值的变量称为不完全变量
缺失值的类型
完全随机缺失(Missing Completely at Random, MCAR)。数据的缺失与不完全变量以及完全变量都是无关的,比如家庭地址的缺失
随机缺失(Missing at Random, MAR)。数据的缺失仅仅依赖于完全变量,例如财务数据缺失情况与企业大小有关
非随机,不可忽略缺失(Not Missing atRandom,NMAR, or nonignorable)。不完全变量中数据的缺失依赖于不完全变量本身,这种缺失是不可忽略的,比如高收入人群不愿意提供他们的收入数据
缺失值的处理方法
直接删除法
填充法
K最近距离邻法(K-means clustering)
多重填补(Multiple Imputation,MI)
直接删除法
直接删除含有缺失值的数据项,当含有缺失值的数据项只占总体数据量很小的一部分时效果最好
填充法
手动填充法(filling manually):在数据量较小的情况下可能是最好的方法,因为一般来说数据所有者对各列数据的含义更加清楚,手动填充后效果更好,但是在数据量较大时无法操作
特殊值填写(Treating Missing Attribute values as Special values):将空值作为一种特殊的值来处理,比如R语言中的NA,python中的None,操作简单方便,但是可能对预测结果造成一定的影响,不推荐使用
平均值填充(Mean/Mode Completer):将信息表中的属性分为数值属性和非数值属性来分别进行处理。如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值;如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值
K最近距离邻法(K-means clustering)
先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据
多重填补(Multiple Imputation,MI)
多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。
缺失值处理的类库
sklearn中关于缺失值的处理类
R语言通过mice包应用多重插补的步骤
代码实现
直接删除法(Drop Columns with Missing Values)
cols_with_missing = [col for col in X_train.columns if X_train[col].isnull().any()]
# Drop columns in training and validation data
reduced_X_train = X_train.drop(cols_with_missing, axis=1)
reduced_X_valid = X_valid.drop(cols_with_missing, axis=1)
填充法(Filling method)
# Imputation
# use SimpleImputer to replace missing values with the mean value along each column.
my_imputer = SimpleImputer()
imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X_train))
imputed_X_valid = pd.DataFrame(my_imputer.transform(X_valid))
# Imputation removed column names; put them back
imputed_X_train.columns = X_train.columns
imputed_X_valid.columns = X_valid.columns
K最近距离邻法(K-means clustering)
imputer = KNNImputer(n_neighbors=2, weights="uniform")
Imputed_X = imputer.fit_transform(X)
多重填补(Multiple Imputation,MI)
#R语言:基于mice包的分析通常分析过程:
library(mice)
imp
fit
pooled
summary(pooled)
参考资料
-
缺失值处理
2021-01-28 06:31:00importpandas as pdimportnumpy as npfrom sklearn.preprocessing importImputer#生成缺失数据df = pd.DataFrame(np.random.randn(6,4),columns=['col1','col2','col3','col4'])df.iloc[1:2,1] =np.nandf.iloc[4,3] ...importpandas as pdimportnumpy as npfrom sklearn.preprocessing importImputer#生成缺失数据
df = pd.DataFrame(np.random.randn(6,4),columns=['col1','col2','col3','col4'])
df.iloc[1:2,1] =np.nan
df.iloc[4,3] =np.nanprint(df)#查看哪些数据缺失
nan_all = df.isnull()#获得数据框中的NA值
print(nan_all)#查看哪些列缺失
nan_col1 = df.isnull().any()#获得含有NA的列
nan_col2 = df.isnull().all()#获得全部为NA的列
print(nan_col1)print(nan_col2)#丢弃缺失值
df2 =df.dropna()print(df2)#使用sklearn将缺失值换成特定值
nan_model = Imputer(missing_value='NaN',strategy='mean',axis=0)#建立替换规则:将值为Nan的缺失值用均值做替换
nan_result = nan_model.fit_transform(df)#应用模型规则
print(nan_result)#使用pandas将缺失值换为特定值
nan_result_pd1 = df.fillna(method='backfill')#用后面的值替换缺失值
nan_result_pd2 = df.fillna(method='bfill',limit=1)#用后面的值替换缺失值,限制每列只能替换一个缺失值
nan_result_pd3 = df.fillna(method='pad')#用前面的值替换缺失值
nan_result_pd4 = df.fillna(0)#用0替换缺失值
nan_result_pd5 = df.fillna({'col2':1.1,'col4':1.2})#用不同值替换不同列的缺失值
nan_result_pd6 = df.fillna(df.mean()['col2':'col4'])#用平均值代替,选择各自列的均值替换缺失值#打印输出
print(nan_result_pd1)print(nan_result_pd2)print(nan_result_pd3)print(nan_result_pd4)print(nan_result_pd5)print(nan_result_pd6)
import pandas as pd
import numpy as np
from sklearn.preprocessing import Imputer
#生成缺失数据
df = pd.DataFrame(np.random.randn(6,4),columns=['col1','col2','col3','col4'])
df.iloc[1:2,1] = np.nan
df.iloc[4,3] = np.nan
print(df)
#查看哪些数据缺失
nan_all = df.isnull()#获得数据框中的NA值
print(nan_all)
#查看哪些列缺失
nan_col1 = df.isnull().any()#获得含有NA的列
nan_col2 = df.isnull().all()#获得全部为NA的列
print(nan_col1)
print(nan_col2)
#丢弃缺失值
df2 = df.dropna()
print(df2)
#使用sklearn将缺失值换成特定值
nan_model = Imputer(missing_value='NaN',strategy='mean',axis=0)#建立替换规则:将值为Nan的缺失值用均值做替换
nan_result = nan_model.fit_transform(df)#应用模型规则
print(nan_result)
#使用pandas将缺失值换为特定值
nan_result_pd1 = df.fillna(method='backfill')#用后面的值替换缺失值
nan_result_pd2 = df.fillna(method='bfill',limit=1)#用后面的值替换缺失值,限制每列只能替换一个缺失值
nan_result_pd3 = df.fillna(method='pad')#用前面的值替换缺失值
nan_result_pd4 = df.fillna(0)#用0替换缺失值
nan_result_pd5 = df.fillna({'col2':1.1,'col4':1.2})#用不同值替换不同列的缺失值
nan_result_pd6 = df.fillna(df.mean()['col2':'col4'])#用平均值代替,选择各自列的均值替换缺失值
#打印输出
print(nan_result_pd1)
print(nan_result_pd2)
print(nan_result_pd3)
print(nan_result_pd4)
print(nan_result_pd5)
print(nan_result_pd6)
-
数据科学 第 3 章 5:缺失值处理、转换字符类型
2021-04-21 06:57:52第3章 5:缺失值这次是用激励数据,没有获得激励的人,业绩和金额方有缺失值,以下为几种处理方法:-- 发现缺失值:isnull/notnull-- 处理缺失值:dropna/fillna保存名称为:01 缺失值.pyimport pymysqlimport ...第3章 5:缺失值
这次是用激励数据,没有获得激励的人,业绩和金额方有缺失值,以下为几种处理方法:
-- 发现缺失值:isnull/notnull
-- 处理缺失值:dropna/fillna
保存名称为:01 缺失值.py
import pymysql
import pandas as pd
from sqlalchemy import create_engine
sql = "select * from jili"
engine = create_engine('mysql+pymysql://root:123456@192.168.200.200/xiaom')
df = pd.read_sql(sql,engine,)
RangeIndex: 42 entries, 0 to 41
Data columns (total 10 columns):
dep 42 non-null object #总共有42行
group 42 non-null object
name 42 non-null object
oldpro 26 non-null float64 #以下每列均有缺失值
newpro 33 non-null float64
oldrate 27 non-null float64
newrate 27 non-null float64
oldbones 24 non-null float64
newbones 26 non-null float64
allbones 27 non-null float64
dtypes: float64(7), object(3)
memory usage: 3.4+ KB
- 发现缺失值:
df.isnull返回的是布尔值,False表示非空值
df.notnull返回布尔值,False表示空值
- 处理缺失值
有删除(dropna)、填充(fillna)两种方法
- 删除:dropna()
df.dropna() #删除包含na的整行。
df.dropna(how = 'all')
# how是方法:如果为any,则表示包含空值的行,如果为all则表示删除整行均为空值的行。
df.dropna(axis = 'columns') #会删除包含空值的列,返回的结果是前3列均不为空值的列。
df.dropna(axis = 'rows',thresh = 8) #表示每行最少有8个非空值
- 填充:fillna
df.fillna(0).head() #填充缺失值:用0 填充
df.fillna(df.mean()).round(2).head() # 用均值填充,保留2位小数
df.fillna(method='ffill').head() #用前一个数填充
df.fillna(menthod = 'bfill').head() #用后一个数据填充
--下面是对错行数据的处理
之前导入sogou数据的时候,有错行的,现在要删除错行的数据:'01 搜狗 错行数据.py'
在转换rank和number列为int格式的时候报错,发现是有的关键词到rank列了,所以rank列有字符的内容,经过简单考虑,准备删除这些错行的。
先找到错行的,就是筛选字符长度大于3位的
- 强制转换为int
然后强制转换为int,再删除没有转换成功,即为空值的行
#没发现of,强制转换为数字.coerce是强制的意思,ignore是忽略
pd.to_numeric(sogou['rank'],errors='coerce')
pd.to_numeric(sogou['number'],errors='coerce')
#也可以用下面的方法一行搞定:
sogou[['rank','number']] = sogou[['rank','number']].apply(pd.to_numeric,errors='coerce')
- 删除rank为空的行
#删除这些错误值,如果用spark就不用处理这么久的数据了?
sogou.dropna(subset=['rank'],inplace=True)
sogou.info()
>>>Out:
Int64Index: 823818 entries, 0 to 825118
Data columns (total 6 columns):
date 823818 non-null datetime64[ns]
userid 823818 non-null object
words 823818 non-null object
rank 823818 non-null float64
number 823818 non-null float64
url 823818 non-null object
dtypes: datetime64[ns](1), float64(2), object(3)
memory usage: 44.0+ MB
- 保存csv
#保存为新的csv:
sogou.to_csv('sogoudayclear.csv',index = False)
-
在MySQL中查找/搜索缺失值
2021-07-16 17:22:18I am using MySQL and have a table called sales. Its primary key is sales_id.-------------------------------------sales_id | invoice_id |-------------------------------------1 | 1472 | 1483 | 15... -
[455]pandas.DataFrame基本操作及缺失值处理
2021-04-21 06:58:06data)) 删除含缺失值的样本 具体处理方法: df.isnull()#是缺失值返回True,否则范围False df.isnull().sum()#返回每列包含的缺失值的个数 df.dropna()#直接删除含有缺失值的行 df.dropna(axis = 1)#直接删除含有... -
python实现数据清洗(缺失值与异常值处理)
2021-01-02 10:42:13将本地sql文件写入mysql数据库 本文写入的是python数据库的taob表 source [本地文件] 其中总数据为9616行,列分别为title,link,price,comment 2。使用python链接并读取数据 查看数据概括 #-*- coding:utf-8 -*- ... -
DataFrame(7):缺失值处理
2021-11-22 17:54:08DataFrame(7):缺失值处理 1、替换字符 例如把字符‘A’ 替换为字符‘B’ data.replace(to_replace="A", value='B') to_replace:替换前的值, value:替换后的值 2、判断缺失值是否存在 (1)pd.notnull(dataframe)... -
如何找到两个MySQL表之间的缺失值?
2021-01-28 06:31:01要查找两个MySQL表之间的缺失值,请使用NOT IN。让我们首先创建一个表-createtableDemoTable1(Valueint);使用插入命令在表中插入一些记录-insertintoDemoTable1values(1);insertintoDemoTable1values(2);... -
数据预处理阶段“不处理”缺失值的思路
2021-06-07 17:43:29在数据预处理阶段,对于具有缺失值的数据记录不做任何处理,也 是一种思路。这种思路主要看后期的数据分析和建模应用,很多模型对 于缺失值有容忍度或灵活的处理方法,因此在预处理阶段可以不做处 理。常见的能够... -
mysql – 为IN列表中的缺失值返回NULL
2021-01-28 06:31:01编辑:我看到人们正在考虑我想在序列中“填补空白”,但实际上我想要的是将NULL替换为IN列表中的缺失值.例如,这个 SELECT id, val FROM tab WHERE id IN (1,100,8,200) 应该回来 id | val --------- 1 | abc 100 | ... -
缺失值处理 - 获取一段时间内所有日期的列表 - (Python、MySQL)
2019-01-25 15:34:44有的时候做数据清洗的时候 ,如果表中数据在某一天没有记录,但是业务要求不能有缺失日期,那么就需要我们将这些缺失日期补上。这个前提就是我们先要有一张包含所有日期的列表(作为左表),供我们进行匹配(left ... -
一文看懂数据清洗:缺失值、异常值和重复值的处理
2019-07-11 08:25:08导读:在数据清洗过程中,主要处理的是缺失值、异常值和重复值。所谓清洗,是对数据集通过丢弃、填充、替换、去重等操作,达到去除异常、纠正错误、补足缺失的目的。 作者:宋天龙 如需转载请联系华章科技 01... -
Pandas缺失值处理 | 轻松玩转Pandas(3)
2018-06-30 12:29:45import pandas as pd什么是缺失值 在了解缺失值(也叫控制)如何处理之前,首先要知道的就是什么是缺失值?直观上理解,缺失值表示的是“缺失的数据”。可以思考一个问题:是什么原因造成的缺失值呢?其实有很多... -
python 检查数据中是否有缺失值,删除缺失值的方式
2020-11-30 10:54:10python 检查数据中是否有缺失值,删除缺失值的方式# 检查数据中是否有缺失值np.isnan(train).any()Flase:表示对应特征的特征值中无缺失值True:表示有缺失值通常情况下删除行,使用参数axis = 0,删除列的参数axis =... -
决策树分类器中,是如何处理缺失值的?
2021-03-13 17:16:50决策树分类器中,是如何处理缺失值的?,决策树分类器中,是如何处理缺失值的?决策树分类器中,是如何处理缺失值的?决策树分类器中,是如何处理缺失值的?</p> -
Python_Pandas_处理数据的缺失值和重复值
2021-08-17 16:31:13处理数据的缺失值 描述 使用isnull()函数可以判断数据表中的哪个值是缺失值,并将缺失值标记为True,非缺失值标记为False 使用dropna函数可以删除数据表中含有缺失值的行。默认情况下,只要某一行中有缺失值,该... -
datax数据从hive导入mysql数据缺失解决
2019-01-18 15:18:44datax数据从hive表导入mysql表,数据缺失解决 -
SparkSQL核心笔记(一)----(DataSet 和 DataFrame 剖析、DataFrameWriter 与 ...缺失值处理)
2020-04-04 00:55:23Column 对象 九、 缺失值处理 一、SparkSQL 是什么 1.1. SparkSQL 的出现契机 数据分析的方式 数据分析的方式大致上可以划分为 SQL 和 命令式两种 命令式 在前面的 RDD 部分, 非常明显可以感觉的到是命令式的, ... -
MYSQL处理数据重复值
2021-01-18 18:02:08MYSQL表或结果集有时会包含重复记录,需要采用某种方法标识这些重复的记录并移除它们,具体方案如下:1、防止表中出现重复的记录1.1、使用主键或唯一索引来防止出现重复的记录。例如,下表person_tbl允许出现first_... -
Mysql实现检查数据缺失
2022-02-21 12:05:44检查B表中的trade_date列在2010.1.1~2022.1.1的范围内是否有缺失 已知: A表中的trade_date可以作为对照标准 代码 SELECT t1.trade_date, t2.trade_date FROM A t1 LEFT JOIN B t2 ON t1.trade_date = t2.trade... -
一文看懂数据清洗:缺失值、异常值和重复值的处理
2019-07-10 16:34:3101数据列缺失的4种处理方法数据缺失分为两种:一种是行记录的缺失,这种情况又称数据记录丢失;另一种是数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺。不同的... -
Spark(三)-- SparkSQL扩展(数据操作) -- 缺失值处理(三)
2019-10-18 10:11:499.缺失值的处理 导读 DataFrame中什么时候会有无效值 DataFrame如何处理无效的值 DataFrame如何处理null 9.1 缺失值的处理思路 如果想探究如何处理无效值, 首先要知道无效值从哪来, 从而分析... -
Mysql中使用聚合函数对null值的处理
2021-01-18 23:27:13这次让我记忆深刻的一个问题是:在mysql中使用聚合函数的时候比如avg(t),t是表中一个类型int型的字段,可为null,有三行数据,三行中的数据分别为:10,null,20,请问最后的结果是什么?我的回答是15,在面试结束...