精华内容
下载资源
问答
  • pandas.DataFrame删除/选取含有特定数值的行或列

    万次阅读 多人点赞 2018-06-20 09:13:59
    1.删除/选取某列含有特殊数值的行 import pandas as pd import numpy as np a=np.array([[1,2,3],[4,5,6],[7,8,9]]) df1=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC')) print(df1) df2=df1....

    1.删除/选取某列含有特殊数值的行

    import pandas as pd
    import numpy as np
    
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    df1=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC'))
    print(df1)
    df2=df1.copy()
    
    #删除/选取某列含有特定数值的行
    #df1=df1[df1['A'].isin([1])]
    #df1[df1['A'].isin([1])]  选取df1中A列包含数字1的行
    
    df1=df1[~df1['A'].isin([1])]
    #通过~取反,选取不包含数字1的行
    print(df1)

    运行结果:

     

    2.删除/选取某行含有特殊数值的列

     

    #删除/选取某行含有特定数值的列
    cols=[x for i,x in enumerate(df2.columns) if df2.iat[0,i]==3]
    #利用enumerate对row0进行遍历,将含有数字3的列放入cols中
    print(cols)
    
    #df2=df2[cols]   选取含有特定数值的列
    df2=df2.drop(cols,axis=1) #利用drop方法将含有特定数值的列删除
    print(df2)

    运行结果:

    3.删除含有空值的行或列

    实现思路:利用pandas.DateFrame.fillna对空值赋予特定值,再利用上文介绍的方法找到这些含有特定值的行或列去除即可。

    import pandas as pd
    import numpy as np
    
    df1 = pd.DataFrame(
        [
            [np.nan, 2, np.nan, 0],
            [3, 4, np.nan, 1],
            [np.nan, np.nan, np.nan, 5],
            [np.nan, 3, np.nan, 4]
        ],columns=list('ABCD'))
    print(df1)
    df2=df1.copy()
    
    df1['A']=df1['A'].fillna('null') #将df中A列所有空值赋值为'null'
    print(df1)
    df1=df1[~df1['A'].isin(['null'])]
    print(df1)
    
    #删除某行空值所在列
    
    df2[0:1]=df2[0:1].fillna('null')
    print(df2)
    cols=[x for i,x in enumerate(df2.columns) if df2.iat[0,i]=='null']
    print(cols)
    df2=df2.drop(cols,axis=1)
    print(df2)

    运行结果:

     

    示例代码下载地址:https://download.csdn.net/download/luocheng7430/10488136

     

     

     

     

     

    展开全文
  • 本篇从二进制的底层,分析解释一下数值溢出问题。以byte为例。 0x01.问题引入 看如下一段Java代码,你能立马说出输出结果吗? public class Main { public static void main(String[] args) { int a=1888; ...

    编程语言中的数字数据类型都预设了大小,也就是说,一个数字数据类型的变量,总会有能表达的上限,有上限就会有溢出。本篇从二进制的底层,分析解释一下数值溢出问题。以byte为例。


    0x01.问题引入

    • 看如下一段Java代码,你能立马说出输出结果吗?
    public class Main {
        public static void main(String[] args) {
            int a=1888;
            byte b=(byte) a;
            System.out.println(b);
        }
    }
    
    • 或许你只能意识到:反正不是1888,反正不会超过byte能表示的数据范围。
    • 赶紧把代码复制下来编译运行一下,一看输出结果:96
    • 为什么会是96呢?
    • 清楚这个之前,我们不妨去探究一下,底层都干了些什么。

    0x02.byte能表示的数据范围

    • 我们都知道,byte能表示的数据范围是:-128-127,但是,为什么是这个范围呢?

    • 原因:在Java中,对于byte类型的变量,JVM会为其分配一个字节的内存,一个字节也就是8位,但是由于最高位是符号位,所以能够表示的数据范围就是 -2^7 --2^7-1。原码,反码,补码知识补充:

      • 原码:最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
      • 反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,符号位除外。
      • 补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1(负数的补码是其绝对值取反)。
      • 在计算机中,用补码表示二进制数。
    • 范围可视化:

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    • 其它数值数据类型的范围,跟byte范围的计算,一模一样。

    0x03.byte的溢出原理

    • 回到最初的例子,我们看一下那个转换的过程都发生了什么。
    • int类型变量占4个字节的内存,也就是32位,所以它能表示的数据范围是:-2^31--2^31-1
    • 那么a变量在内存中的表示,是这样吗?

    在这里插入图片描述

    • 必然不是,因为上面说到,一个int类型的变量,占了32位,那么完整的形式应该是:

    在这里插入图片描述

    • 而此时一个未初始化的byte变量b在内存中应该是:

    在这里插入图片描述

    • 此时如果进行强制类型转换 b=(byte)a,int类型变量的低8位会给byte,然后int其它位的数据就会丢失。如下:

    在这里插入图片描述

    • 这也正好解释了最初b的输出问题。

    0x04.快速计算溢出后的值

    • 使用二进制去理解原理固然清晰,但是如果都转到二进制计算的话,肯定是会比较复杂的。
    • 我们不如看下它的转换规律:
    int a=128;
    byte b=(byte) a;
    System.out.println(b);
    //上述代码输出-128
    
    int a=129;
    byte b=(byte) a;
    System.out.println(b);
    //上述代码输出-127
    
    int a=383;
    byte b=(byte) a;
    System.out.println(b);
    //上述代码输出127
    
    int a=384;
    byte b=(byte) a;
    System.out.println(b);
    //上述代码输出-128
    
    int a=-129;
     byte b=(byte) a;
    System.out.println(b);
    //上述代码输出127
    
    
    • 不难发现,随着int的增大,byte转换后的值都在一个循环内。如下:

    在这里插入图片描述

    • 可以这样看这个图,在byte范围内127+1=-128-128-1=127

    • 那么整个的计算可以总结为:

      • 若a>127,上界溢出,顺时针循环,那么强转成byte后,若以0为起点,对256取余得到的值,就是在这个圈中从0开始往右走了多少。例如:1888,对256取余得96,相当于从0向右走了96,所以最后的值就是96。1920,对256取余得128,相当于从0向右走了128,所以最后的值就是-128。

      • 若a<-128,下界溢出,逆时针循环,那么强转成byte后,若以0为起点,对256取余得到的值,就是在这个圈中从0开始往左走了多少。例如:-385,对256取余得129,相当于从0开始向左走了129,所以最后的值就是127。依次类推。

    • 只要记住循环圆,计算还是比较简单的。

    0x05.推广到所有数值类型的溢出

    • byte的溢出是一个数值溢出的典型例子,其它数值类型因为表示的范围比较大,发生溢出的情况比较少,不过其所有溢出的原理和byte类型一模一样。
    • int类型溢出的例子:
    public class Main {
        public static void main(String[] args) {
            System.out.println(Integer.MAX_VALUE+1==Integer.MIN_VALUE);
            //输出true
        }
    }
    
    • 数值溢出也算是一个很经典的漏洞,如果有数值溢出点,经过攻击者精心的构造利用,可能会造成巨大的损失。具体数值溢出漏洞利用,可以参考:整型溢出漏洞

    随时注意数据类型范围很重要哦~~~

    展开全文
  • 数值积分

    万次阅读 2021-03-04 10:02:24
    数值积分-romberg算法,具体可以参考这篇文章 数值积分-simpson算法,具体可以参考这篇文章 给定函数f(x)f(x)f(x),用数值方法求积分∫abf(x)dx\int_a^b f(x) {\rm d}x∫ab​f(x)dx。 数值方法有很多种,仅介绍...

    数值积分-romberg算法,具体可以参考这篇文章

    数值积分-simpson算法,具体可以参考这篇文章

    给定函数f(x)f(x),用数值方法求积分abf(x)dx\int_a^b f(x) {\rm d}x

    数值方法有很多种,仅介绍simpson和romberg两种方法。

    simpson方法比较简单,是以二次曲线逼近的方式取代矩形或梯形积分公式,以求得定积分的数值近似解。

    romberg方法比较复杂一点,同等的计算复杂度下,精度比simpson更高。

    template<class T>
    double simpson(const T &f, double a, double b, int n)
    {
    	const double h = (b - a) / n;
    	double ans = f(a) + f(b);
    	for(int i = 1; i < n; i += 2) ans += 4 * f(a + i * h);
    	for(int i = 2; i < n; i += 2) ans += 2 * f(a + i * h);
    	return ans * h / 3;
    }
    template<class T>
    double romberg(const T &f, double a, double b, double eps = 1e-8)
    {
    	vector <double>t;
    	double h = b - a, last, curr;
    	int k = 1, i = 1;
    	t.push_back(h * (f(a) + f(b)) / 2);		//梯形 
    	do{
    		last = t.back();
    		curr = 0;
    		double x = a + h / 2;
    		for(int j = 0; j < k; ++j)
    		{
    			curr += f(x);
    			x += h;
    		}
    		curr = (t[0] + h * curr) / 2;
    		double k1 = 4.0 / 3, k2 = 1.0 / 3.0;
    		for(int j = 0; j < i; j++)
    		{
    			double temp = k1 * curr - k2 * t[j];
    			t[j] = curr;
    			curr = temp;
    			k2 /= 4 * k1 - k2;			//防止溢出 
    			k1 = k2 + 1;
    		}
    		t.push_back(curr);
    		k *= 2;
    		h /= 2;
    		i++;
    	}while(fabs(last - curr) > eps);
    	return t.back();
    }
    
    展开全文
  • 字符转数值数值转字符、字符串转数值以及数值转字符串 将字符类型转换为Int类型(即字符值转化为其对应的ASCII值) // 将字符类型(Char)转化为Int类型(即字符值转化为其对应的ASCII值) int aAsciiValue = 'a';...

    一、字符类型转换为Int类型(即字符值转化为其对应的ASCII值)

    // 将字符类型(Char)转化为Int类型(即字符值转化为其对应的ASCII值)
    int aAsciiValue = 'a';
    int qAsciiValue = 'q';
    
    System.out.println(aAsciiValue);
    System.out.println(qAsciiValue);
    

    二、数值转字符(即ASCII值转化为对应的字符)

    int aAsciiValue = 97;
    int bAsciiValue = 98;
    //将数值转化为字符(即ASCII值转化为字符)
    char aChar = (char) aAsciiValue;
    char bChar = (char) bAsciiValue;
    
    System.out.println(aChar);
    System.out.println(bChar);
    

    三、字符串转数值 (字符必须为数值型字符

    String str = "123";//注意:必须为数值型字符串
    int str2Data = Integer.parseInt(str);
    

    如果不是数值型字符串,则会报一个异常,例如:

    String str = "hello";//非数值型字符串
    int str2Data = Integer.parseInt(str);//非数值型字符串转化的时候会报异常
    

    会报如下异常:

    Exception in thread "main" java.lang.NumberFormatException: For input string: "hello"
    	at java.lang.NumberFormatException.forInputString(Unknown Source)
    	at java.lang.Integer.parseInt(Unknown Source)
    	at java.lang.Integer.parseInt(Unknown Source)
        ...
    

    四、数值转字符串

    数值转化为字符串的方法比较多,具体如下:

    (1)data+""

    data可以是任意数值类型

    int intData = 199;
    String intData2Str = intData + "";
    System.out.println(intData2Str);
    
    double douData = 199.99;
    String douData2Str = douData + "";
    System.out.println(douData2Str);
    

    (2) String.valueOf(value)

    其中 value 为任意一种数值类型。

    int iData = 106;
    String iData2Str = String.valueOf(iData);
    System.out.println(iData2Str);
    
    double dData = 10.02;
    String dData2Str = String.valueOf(dData);
    System.out.println(dData2Str);
    

    当对象为空时,会报异常:

    String str = String.valueOf(null);//报空指针异常
    

    报如下异常:

    Exception in thread "main" java.lang.NullPointerException
    	at java.lang.String.<init>(Unknown Source)
    	at java.lang.String.valueOf(Unknown Source)
        ...
    

    (3)Object.toString()

    int iData = 106;
    double dData = 10.02;
    
    String iData2Str1 = Integer.valueOf(iData).toString();
    String dData2Str1 = Double.valueOf(dData).toString();
    

    注意:
    (1)先要将基本类型,转换为其对应的包装类
    即上述的:Integer.valueOf(iData) 和 Double.valueOf(dData)
    (2)在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。

    (4)(String)要转化的对象

    • 需要注意的是类型必须能转成String类型

    因此最好用instanceof做个类型检查,以判断是否可以转换。否则容易抛出CalssCastException异常。

    • 此外,需特别小心的是因定义为Object类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。这时要格外小心。
    • 此外,因null值可以强制转换为任何java类类型(String)null也是合法的

    参考:
    java如何将char类型的数字转换成int型的数字
    Java字符串和数字间的转换

    展开全文
  • 使用poi读取excel文件单元格的数据,若是单元格数据是数值格式,poi获取单元格的数值值: row.getCell(j).getNumericCellValue() 返回的的结果是double类型 若是单元格是int类型,那获取出来的数值也还是...
  • 数值分析

    千次阅读 2018-07-27 16:30:43
    数值分析 (数学下属学科) 数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象,为计算数学的...
  • 数值类型

    千次阅读 2014-06-25 22:20:01
    数值类型Python支持三种数值类型:整数、浮点数和复数。只有三种类型,这样比较简便,连长整数都省略了,因为当一个数据超长时,自动变成长整数。这与其它语言有众多的数值类型是不同的。在Python里所有变量的...
  • 数值微分

    千次阅读 2017-03-26 22:00:01
    一、写在前面 数值积分之后,就应该是数值微分了,还是老套路,表明实验内容后,直接上代码,思想都在注释之中。 实验内容:二、实验过程对数值微分的思想有了一定的掌握,根据算法最基本的公式来写 三、实验结果...
  • Matlab数值剔除

    千次阅读 2020-10-17 11:13:08
    Matlab 数值剔除Matlab数值剔除数据处理 Matlab数值剔除 在进行人工智能等算法之前,对样本数值处理分析时经常要把其中的坏值删除掉。因为输入输出都是多值的,成矩阵排列,删除某一个值意味着要删除相关的所人值,...
  • 数值分析(1)-什么是数值分析

    千次阅读 2019-04-14 10:20:04
    文章目录1 什么是数值分析1.1 数值分析研究什么 1 什么是数值分析 数值分析现在是一般理工科研究生入学必学的科目之一,不再单纯是理论,而是结合计算机解决数学问题。 1.1 数值分析研究什么 书上原话: 根据数学...
  • 数值分析】常微分方程数值解:欧拉公式

    万次阅读 多人点赞 2013-02-18 14:10:23
    数值微商的方法,即用差商近似微商数值求解常微分方程。 用向前差商近似 做出y(x)的在x=x0处的一阶向前差商式: 又,于是得到 而y(x1)的近似值y1可按 或 求得。类似地,由 以及 得到计算近似值的向前...
  • 在做表格的时候我们经常会遇到数字的数值格式和文本格式交叉出现的现象,利用单元格格式将它们都调整为统一格式往往不奏效,那么我们可以利用下面两种方法。 原始数据 这里可以看到是数字的文本格式和数值格式的交叉...
  • js数值类型

    千次阅读 2018-09-14 22:32:51
    js数值类型–number js数值类型的存储形式 js数值的范围与精度(有效数位数) js中十进制小数的存储与运算不准确的问题 数值的表示方法 关于js中的NaN 与数值有关的全局方法 js数值类型–number js数值类型的...
  • MATLAB偏微分方程数值

    千人学习 2019-05-14 22:46:53
    结合MATLAB偏微分方程数值解工具箱介绍偏微分方程的求解,分GUI和MATLAB函数两种实现方式进行介绍。
  • 在最近接到的需求是这样的,画一个折线图,关键点使用空心的圆点标识出来,鼠标移动到关键点上,显示出当前数值;鼠标移走数值消失。 我们遇到这个需求的时候,第一时间就会想到使用 QLineSeries 画折线图。首先...
  • 1. 千分位分割数值 对于英美数值数据,千分位分隔符(逗号分割)很常见,如下面一份房地产销售数据,land.squre.feet, gross.square.feet两列数据。 2. R不能自动识别千分位分割数值 虽然在Excel里面,千分位...
  • Python:一行代码将以e为结尾的科学计算法类型的数值转为小数点类型数值 目录 一行代码将以e为结尾的科学计算法类型的数值转为小数点类型数值 一行代码将以e为结尾的科学计算法类型的数值转为...
  • KMP算法以及next函数值、nextval函数值的计算方法 数据结构中串涉及的内容即串的模式匹配,比较难理解的KMP算法,难在next函数值和nextval函数值的求解 一、问题描述 给定一个主串S及一个模式串P,判断模式串是否为...
  • js数值转换

    千次阅读 2019-03-18 19:11:19
    js数值转换 有三个函数可以将非数值转换成数值:Number(),parseInt(),parseFloart()。 Number() Number() 是一个转型函数,可以用于任何数据类型,它的函数转换规则如下: 如果是Boolean值,true和false将分别被...
  • matlab数值微分

    千次阅读 2018-10-03 11:35:46
    文章目录标签(空格分隔): matlab 数值 微分 算法@[toc]matlab数值微分1 测试数值微分函数midD2Diff()2 中心二阶差商微分 midD2Diff()3 中心差商微分 midDiff()4 前向差商微分 forwardDiff()5 后向差商微分 ...
  • 查看tensor数值

    千次阅读 2017-11-26 01:17:23
    查看tensor数值
  • python:数值字符串转数值

    千次阅读 2018-02-11 09:28:42
    (1)str to numberstr1='1.2'i=int(str1) ;会报错invalid literal for int() with base 10: '1.2',主要是因为int只能转数值为整数的字符串如果要转为int,可以采用如下方式:i=int(float(str1))...
  • 数值分析之数值稳定性篇

    千次阅读 2017-01-01 21:09:00
    稳定性是数值分析的一个基本问题。 --L N. Trefethen 一个问题定...
  • 数值计算】计算机中的数值计算

    千次阅读 2018-08-05 16:59:56
    计算机中的数值计算,通常是指通过迭代过程更新解的估计量来解决数学问题, 而不是我们在草稿纸上通过解析过程推导出公式来提供准确解的方法。常用的操作包括两类 优化:找到最小化或最大化函数值的参数 线性方程...
  • 让颜色对应数值,matlab colormap

    万次阅读 2017-04-26 12:39:15
    如何让自己画出的数值对应不同的颜色呢?换话句话说,如何用不同的颜色表示不同的数值呢? 就是让数值的范围对应颜色的范围。 matlab colormap 标准色hsv 色彩饱和值(以红色开始束) hot 从黑到红到黄到白 ...
  • 数值稳定性

    千次阅读 2019-03-08 16:09:56
    数值分析中,数值稳定性是一种希望得到的数值算法特性。根据算法的不同,稳定性的精确定义也有所不同,但是都与算法的精确性与正确性相关。 理论上有些计算下可以用多种代数上等价的理想实数或者复数算法来实现,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 304,264
精华内容 121,705
关键字:

数值