Numpy&Pandas 数据处理与挖掘

2023-11-04

笔记来源B站:https://www.bilibili.com/video/BV1xt411v7z9?p=21

python学习笔记

1 Numpy

1.1 Numpy优势

1.1.1 Numpy介绍

Numpy(Numerical Python)是python的数值计算库,用于快速处理任意维度的数组
Numpy支持常见的数组和矩阵操作
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器

1.1.2 ndarray介绍

ndarray:N-dimensional array

用法示例:

import numpy as np

score = np.ndarray([],[],[])

1.1.3 ndarray与Python原生list效率对比

在这里插入图片描述
结果:
在这里插入图片描述

1.1.4 ndarray优势

  1. 内存块风格
    在这里插入图片描述

    • ndarray存储的都是相同类型的数据,这样存储数据时数据与数据的地址都是连续的,虽然通用性比较差,但是能极大的提高运算效率
    • list可以存储不同类型的数据,因此通用性较强,但是数据的地址不是连续的,读取数据的时候只能一个一个寻址,造成效率不高
  2. ndarray支持并行化(向量化)运算

  3. Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码

1.2 认识N维数组-ndarray属性

1.2.1 ndarray的属性

数组属性反映了数组本身固有的信息

属性名字 属性解释
ndarray.shape 数组维度的元组
ndarray.ndim 数组维数
ndarray.size 数组中的元素数量
ndarray.dtype 数组元素的类型
ndarray.itemsize 一个数组元素的长度(字节)

其中上面两个加粗的属性比较重要,知道上面两个加粗的属性之后,就相当于知道了所有的其他属性

在这里插入图片描述

1.2.2 ndarray的形状

创建三个不同的数组

a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3,4])
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])

在这里插入图片描述

1.2.3 ndarray的类型

在这里插入图片描述

1.3 基本操作

1.3.1 生成数组的方法

  1. 生成0和1的数组
    np.zeros(shape)
    np.ones(shape)

    在这里插入图片描述

  2. 从现有数组中生成
    np.array()
    np.copy()
    np.asarray()

    注意:前两者是创建了一个新的数组,最后np.asarray()是指拷贝了索引值,因此当原数组发生改变的时候,使用最后一种方法所“创建”的数组也会发生变化

  3. 生成固定范围的数组
    np.linspace(0, 10, 101)
    # 生成[0,10]之间的等间距101个点
    np.arange(a, b, c)
    # 生成[a, b)之间的点,c是步长

  4. 生成随机数组

    • np.random模块
      • 均匀分布 np.random.uniform(low = 0.0, high = 1.0, size = None)
      • 正态分布np.randoom.normal(loc = 0.0, scale = 1.0, size = None)

1.3.2 切片索引

  • 二维数组索引
    • res = data[0, 0:3]
    • 代表索引data的第一行,第1到3列
    • 注意:用:索引时是左闭右开的
  • 三维数组索引
    • 方法一样,从高维向低维索引即可

1.3.3 形状修改

  • ndarray.reshape((a,b))

    • 将数组修改为a行b列,返回一个新的数组
    • 注意:只会将形状重新排列,内部的数据顺序不会改变(不能实现转置)
      import numpy as np
      
      a1 = np.array([[1,2,3],[4,5,6]])
      print("-------before---------")
      print(a1)
      a2 = a1.reshape((3,2))
      print("-------after:a1---------")
      print(a1)
      print("-------after:a2---------")
      print(a2)
      
      在这里插入图片描述
  • ndarray.resize((a,b))

    • 原数组修改为a行b列,使用的时候不需要新数组来接,直接用
    • 注意:只会将形状重新排列,内部的数据顺序不会改变(不能实现转置)
      import numpy as np
      
      a1 = np.array([[1,2,3],[4,5,6]])
      print("-------before---------")
      print(a1)
      a1.resize((3,2))
      print("-------after:a1---------")
      print(a1)
      
      在这里插入图片描述
  • ndarray.T

    • 返回转置后的新数组
      import numpy as np
      
      a1 = np.array([[1,2,3],[4,5,6]])
      print("-------before---------")
      print(a1)
      a2 = a1.T
      print("-------after:a1---------")
      print(a1)
      print("-------after:a2---------")
      print(a2)
      
      在这里插入图片描述

1.3.4 类型修改

  • ndarray.astype(type)
    • type是类型的字符串
  • ndarray.tostring()序列化到本地

1.3.5 数组去重

import numpy as np

a1 = np.array([[1,2,3,4],[3,4,5,6]])
print("-------before---------")
print(a1)
a2 = np.unique(a1)
print("-------after:a1---------")
print(a1)
print("-------after:a2---------")
print(a2)

在这里插入图片描述

1.4 Ndarray运算

1.4.1 逻辑运算

import numpy as np

# 生成5*5的数组,每行都是正态分布
a1 = np.random.normal(loc = 0, scale= 1.0, size=(5,5))
print("-------before---------")
print(a1)

# 逻辑运算 >0.5为True,否则为False
a2 = a1 > 0.5
print("-------after:a2---------")
print(a2)

# 布尔索引,大于0.5的值都改为1.1
a1[a1 > 0.5] = 1.1
print("-------after:a1---------")
print(a1)

结果:
在这里插入图片描述

1.4.2 通用判断函数

  • np.all(判断条件)

    • 当判断条件只要有一项不满足,就返回False
    • 只有当判断条件全部都满足时,才返回True
  • np.any(判断条件)

    • 判断条件只要有一项满足,就返回True
    • 只有判断条件全部都不满足时,才返回False
  • 代码示例

    import numpy as np
    
    # 生成5*5的数组,每行都是正态分布
    a1 = np.random.normal(loc = 0, scale= 1.0, size=(5,5))
    print("-------before---------")
    print(a1)
    
    # 判断前两行是不是全都大于零
    print(np.all(a1[:2,:]>0))
    
    # 判断后三行有没有小于零的
    print(np.any(a1[3:,:]<0))
    

    结果:
    在这里插入图片描述

1.4.3 三元运算符

  • np.where(判断条件,条件成立赋值,条件不成立赋值)

    import numpy as np
    
    # 生成5*5的数组,每行都是正态分布
    a1 = np.random.normal(loc = 0, scale= 1.0, size=(5,5))
    print("-------before---------")
    print(a1)
    
    # a1 > 0的就赋1,小于0的就赋0
    a2 = np.where(a1>0,1,0)
    print("-------after:a2---------")
    print(a2)
    

    结果:
    在这里插入图片描述

  • 复合逻辑需要结合np.logical_andnp.logical_or使用

    import numpy as np
    
    # 生成5*5的数组,每行都是正态分布
    a1 = np.random.normal(loc = 0, scale= 1.0, size=(5,5))
    print("-------before---------")
    print(a1)
    
    # a1 > 0 并且 a1 < 1 的就赋1,小于0的就赋0
    a2 = np.where(np.logical_and(a1 >0, a1 < 1),1,0)
    print("-------after:a2---------")
    print(a2)
    

    在这里插入图片描述

小结
ndarray > XX 这种逻辑判断的语句可以返回一个逻辑数组,数组里面只有True或者False,代表相应位置的元素是否满足判断条件

1.4.4 统计运算

1.4.4.1 统计指标
  • 统计指标两中调用方法:
    • np.函数名()
    • ndarray.方法名()
  • 上面的函数/方法包括
    • np.max() # 最小值
    • np.min() # 最大值
    • np.mean() # 平均值
    • np.median() # 中位数
    • np.var() # 方差
    • np.std() # 标准差
  • 参数axis
    • 直接调用上述方法会求所有数据的最大值、最小值……
    • 当出现按行/列求最大/最小……的需求时,需要用到参数axis
    • axis的值对应以数组的第几维为基准进行求值,具体在用的时候可以先试试

代码示例:

import numpy as np

# 生成5*5的数组,每行都是正态分布
a1 = np.random.normal(loc = 0, scale= 1.0, size=(5,4))
print("-------before---------")
print(a1)

print(np.max(a1, axis=0))
print(a1.max(axis=1))
print(np.max(a1, axis= -1))

结果:
在这里插入图片描述

分析

  • 通过结果不难看出,axis=0时,代码是按列求最大值,当axis=1或者axis=-1时,代码是按行求最大值
  • 分析结果,数组a1的shape为(5,4),第一个5代表数组的第一个[]中有5个小的[],第二个5代表第二个[]中有4个元素。所以当axis=0时,以5为维度求最大值,是对5个[]之间进行比较。当axis=1时,以4为维度求最大值,是对每个[]里面的元素求最大值。axis=-1代表维度的最后一个,在本例中跟axis=1的情况一样
1.4.4.2 返回最大值/最小值所在的位置
  • np.argmax(ndarray, axis= )
  • np.argmin(ndarray, axis= )

1.5 数组间运算

1.5.1 数组与数的运算

数组与数字的加减乘除可以通过运算符号直接进行,默认对数组中的每一个数字进行操作

import numpy as np

a1 = np.array([[1,2,3,4,5],[6,7,8,9,0]])
print("-------before---------")
print(a1)

a2 = a1 + 10
a3 = a1 * 0.3
print("-------after:a2---------")
print(a2)
print("-------after:a3---------")
print(a3)

在这里插入图片描述

1.5.2 数组与数组的运算

数组与数组的运算要满足广播机制

  • 执行broadcast的前提在于,两个ndarray执行的是element-wise的运算,Broadcast机制的功能是为了方便不同形状的ndarray(numpy库的核心数据结构)进行数学运算。
  • 当操作两个数组时,numpy会逐个比较它们的shape(构成的元组tuple),只有在下述情况下,两个数组才能够进行数组与数组的运算。
    • 维度相等
    • shape(其中相对应的一个地方为1)

以下都是可以运算的情况
在这里插入图片描述

代码示例(满足广播机制):

import numpy as np

a1 = np.array([[1,2,3,4,5],[6,7,8,9,0]])
a2 = np.array([[2],[4]])

print(a1.shape)
print(a2.shape)

print("-------a1+a2---------")
print(a1+a2)
print("-------a1*a2---------")
print(a1*a2)
print("-------a1/a2---------")
print(a1/a2)

结果:
在这里插入图片描述

1.5.3 矩阵运算

  • 矩阵的存储
    • np.array([[a,b,c],[d,e,f]]) # 还是以数组的形式存储
    • np.mat([[a,b,c],[d,e,f]]) # 以矩阵的形式存储
  • 矩阵乘法
    • 必须要满足矩阵的乘法规则(具体去看线代)
    • 如果用ndarray的形式存储矩阵,两个乘法api:
      • np.matmul()
      • np.dot()
    • 如果用mat的形式存储矩阵
      • 两个矩阵直接使用*运算符
import numpy as np

a1 = np.array([[1,2],[3,4]])
a2 = np.array([[0.3],[0.7]])

print(a1.shape)
print(a2.shape)

a1_mat = np.mat(a1)
a2_mat = np.mat(a2)

print("-------np.matmul(a1,a2)---------")
print(np.matmul(a1,a2))
print("-------np.dot(a1,a2)---------")
print(np.dot(a1,a2))
print("-------a1_mat*a2_mat---------")
print(a1_mat*a2_mat)

在这里插入图片描述

1.6 合并、分割

1.6.1 合并

  • np.hstack(元组) # 水平合并
  • np.vstack(元组) # 垂直合并
  • np.concatenate(元组, axis=) # 指定方向进行拼接
import numpy as np

a1 = np.array([1,2,3,4])
a2 = np.array([3,4,5,6])

print("-------a1---------")
print(a1)

print("-------a2---------")
print(a2)

print("-------np.hstack((a1,a2))---------")
print(np.hstack((a1,a2)))

print("-------np.vstack((a1,a2))---------")
print(np.vstack((a1,a2)))

print("-------np.concatenate((a1,a2),axis=0)---------")
print(np.concatenate((a1,a2),axis=0))

在这里插入图片描述
注意:上面两个数组用concatenate合并,axis只能等于0(暂不知道为啥

1.6.2 分割

import numpy as np

a1 = np.arange(9.0)

print("---------a1---------")
print(a1)

print("---------np.split(a1,3)---------")
print(np.split(a1,3))

print("---------np.split(a1,[3,5,6,9])---------")
print(np.split(a1,[3,5,6,9]))

在这里插入图片描述

1.7 IO操作与数据处理

1.7.1 Numpy读取文件

  • text = np.genfromtxt("文件路径", delimiter="分隔符")

注意:numpy不能处理字符串,因此当数据中有字符串时会返回nan,因此一般也不用numpy读取文件

在这里插入图片描述

1.7.2 缺失值处理

建议使用pandas

2 Pandas

2.1 Pandas介绍

  • Panel + Data + Analysis 面板数据研究
  • 数据处理的python库
  • 集成了Numpy和Matplotlib
  • pandas的优点:
    • 便捷的数据处理能力
    • 读取文件方便
    • 封装了matplotlib和numpy的画图和运算
  • pandas三大核心数据结构
    • DataFrame
    • Panel
    • Series

2.1.1 DataFrame

  • 既有行索引也有列索引的二维数组
  • df = pd.DataFrame(array, index=行索引, column=列索引)
import pandas as pd
import numpy as np

a1 = np.random.normal(0,1.0,(4,5))

print("----------a1----------")
print(a1)

df1 = pd.DataFrame(a1)

print("----------df1----------")
print(df1)

# 添加行索引
INDEX = ["第{}行".format(i) for i in range(4)]
# 添加列索引
COLUMN = ["第{}列".format(i) for i in range(5)]

df2 = pd.DataFrame(a1, index=INDEX, columns= COLUMN)

print("----------df2----------")
print(df2)

在这里插入图片描述

2.1.2 DataFrame的属性

  • df.shape # 形状
  • df.index # 行索引
  • df.columns # 列索引
  • df.values # 去掉行索引和列索引的部分,就是一个ndarray
  • df.T # 转置,行列互换

补充两个常用方法:

  • df.head(a) # 返回数据的前a行,默认前5行
  • df.tail(a) # 返回数据的后a行。默认后5行
  • 以上两个函数可以用于快速的浏览数据整体结构,查看一下行列标签等
import pandas as pd
import numpy as np

a1 = np.random.normal(0,1.0,(4,5))

print("----------a1----------")
print(a1)

# 添加行索引
INDEX = ["第{}行".format(i) for i in range(4)]
# 添加列索引
COLUMN = ["第{}列".format(i) for i in range(5)]

df2 = pd.DataFrame(a1, index=INDEX, columns= COLUMN)

print("----------df2----------")
print(df2)
print("----------df2.shape----------")
print(df2.shape)
print("----------df2.index----------")
print(df2.index)
print("----------df2.columns----------")
print(df2.columns)
print("----------df2.values----------")
print(df2.values)
print("----------df2.T----------")
print(df2.T)

在这里插入图片描述

2.1.3 DataFrame的索引设置

  • 修改行列索引值
    • 索引值不支持单独修改,只能全部修改
    • 如:修改行索引df.index = [新的索引值]
  • 重设索引
    • df.reset_index(drop=True/False)
      • drop默认为False,不删掉原来的索引,原来的行索引被当作是第一列
      • drop=True,删除原来的行索引
  • 设置新索引
    • df.set_index(keys, drop=True)
      • keys:列索引名或者列索引名称的列表
      • drop:默认为True,把用来当作索引的那一列从原数据中删除
    • 代码示例:
      import pandas as pd
      import numpy as np
      
      df = pd.DataFrame({'month':[1,4,7,10],
                          'year':[2012,2013,2014,2015],
                          'scale':[55,56,78,36]})
      print("--------df-------")
      print(df)
      
      df_Ture = df.set_index("month", drop=True)
      print("--------df_True-------")
      print(df_Ture)
      
      df_False = df.set_index("month",drop=False)
      print("--------df_False-------")
      print(df_False)
      
      df_Mul = df.set_index(["month", "year"])
      print("--------df_Mul-------")
      print(df_Mul)
      print(df_Mul.index)
      
      在这里插入图片描述

2.1.4 MultiIndex与Panel

  • MultiIndex
    • 如果给一个DataFrame设置多个索引,则可以看作是一个带MultiIndex的DataFrame,可以用来存储三维数据
    • 如果一个index是MultiIndex,则这个index还有两个属性
      • df.index.names # 各个索引的名称是什么
      • df.index.levels # 各个索引的值是什么
  • Panel
    • 用于存储三维数据的数据结构
    • 注意:Pandas从版本0.20.0开始弃用Panel:推荐的用于表示3D数据的方法是DataFrame上的Multilndex方法

2.1.5 Series

  • 带索引的一维数组,即从DataFrame中取取某一行或某一列得到的数据
  • series结构只有行索引
  • 属性
    • sr.index # 索引名称
    • sr.values # 去掉索引的一位ndarray
  • 方法
    • sr=pd.Series([数据], index=[索引]) # 创建Series
    • sr=pd.Series({字典}) # 通过字典创建Series

2.2 基本数据操作

2.2.1 索引操作

  1. 直接索引
    • 必须先列后行 进行索引
    • df["列索引"]["行索引"]
  2. 按名字索引
    • 结合loc使用索引
    • df.loc["行索引","列索引"]
  3. 按数字索引
    • 结合iloc使用索引
    • df.iloc[a, b] a和b为对应的行列数字值
  4. 组合索引
    • 使用ix组合索引
    • df.ix[0:4,[列索引名1, 列索引名2, ...]]
    • 注意:组合索引的方法在最新版的Python中已经取消
    • 曲线救国:使用loc或者iloc实现组合索引
      • df.loc[df.index[0:4], [列索引名1, 列索引名2, ...]]
      • df.iloc[0:4, df.columns.get_indexer([列索引名1, 列索引名2, ...])]

代码示例:

import pandas as pd
import numpy as np

a1 = np.random.normal(0,1.0,(4,5))

# 添加行索引
INDEX = ["第{}行".format(i) for i in range(4)]
# 添加列索引
COLUMN = ["第{}列".format(i) for i in range(5)]

df = pd.DataFrame(a1, index=INDEX, columns= COLUMN)

print("-------df-------")
print(df)

print("-------直接索引-------")
print(df["第2列"]["第1行"])

print("-------按名字索引-------")
print(df.loc[["第1行","第2行"],"第2列"])

print("-------按名字索引-------")
print(df.iloc[1:3,2])

结果
在这里插入图片描述

2.2.2 赋值操作

  • 对某一列所有的值进行统一赋值
    • df.列索引名 = 新值
    • df[列索引名] = 新值
  • 对某一个值进行赋值操作
    • 用上述索引方法找到相应的值,然后直接使用=进行赋值

2.2.3 排序

  • 对内容进行排序
    • df.sort_values(by='列索引名', ascending=)
      • ascending = True 升序排列
      • ascending = False 降序排列
    • 排序基准为多个关键词时 df.sort_values(by=['列索引名1', '列索引名2', ...], ascending=)
  • 对索引排序
    • df.sort_index()

2.3 DataFrame运算

2.3.1 算数运算

  • 使用运算符(加减乘除)
    1. 索引到所需要的运算级别(DataFrame->Serise->具体值)
    2. 使用运算符直接运算,如df.iloc[2,3] = df.iloc[2,3] + 10
  • 使用运算函数
    1. 索引到所需要的运算级别(DataFrame->Serise->具体值)
    2. 使用运算函数进行运算
      • .add()
      • .sub()
    3. 使用运算函数的好处是可以继续在后面加.,比如df.add(10).head()

2.3.2 逻辑运算

  1. 逻辑运算符<, >, |, &
    • 与numpy类似,也可以进行布尔索引(即以某个行/列的值作为条件,筛选出dataframe满足行要求的行/列)
    • 代码示例(单个条件)
      import pandas as pd
      import numpy as np
      
      a1 = np.random.normal(0,1.0,(4,5))
      
      # 添加行索引
      INDEX = ["第{}行".format(i) for i in range(4)]
      # 添加列索引
      COLUMN = ["第{}列".format(i) for i in range(5)]
      
      df = pd.DataFrame(a1, index=INDEX, columns= COLUMN)
      
      print("-------df-------")
      print(df)
      
      print("-------逻辑运算-------")
      print(df["第2列"]>0)
      
      print("-------布尔运算-------")
      print(df[df["第2列"]>0])
      
    • 结果
      在这里插入图片描述
      返回了满足第2列数据>0的所有数据
    • 代码示例(多个判断条件)
      import pandas as pd
      import numpy as np
      
      a1 = np.random.normal(0,1.0,(7,5))
      
      # 添加行索引
      INDEX = ["第{}行".format(i) for i in range(7)]
      # 添加列索引
      COLUMN = ["第{}列".format(i) for i in range(5)]
      
      df = pd.DataFrame(a1, index=INDEX, columns= COLUMN)
      
      print("-------df-------")
      print(df)
      
      print("-------逻辑运算-------")
      print((df["第2列"]>-0.5) & (df["第3列"]< 0.5))
      
      print("-------布尔运算-------")
      print(df[(df["第2列"]>-0.5) & (df["第3列"]< 0.5)])
      
    • 结果
      在这里插入图片描述
  2. 逻辑运算函数
    • query(expr) 好用,推荐!
      • expr:查询字符串,要实现上面的效果,只需要编写一个字符串即可
      • 代码示例
        import pandas as pd
        import numpy as np
        
        a1 = np.random.normal(0,1.0,(7,5))
        
        # 添加行索引
        INDEX = ["第{}行".format(i) for i in range(7)]
        # 添加列索引
        COLUMN = ["第{}列".format(i) for i in range(5)]
        
        df = pd.DataFrame(a1, index=INDEX, columns= COLUMN)
        
        print("-------df-------")
        print(df)
        
        print("-------query-------")
        print(df.query("第2列 > 0 & 第3列 < -0.5"))
        
      • 图片
        在这里插入图片描述
    • isin()
      • 判断一组数中是否有某些值
      • 逻辑判断df[列索引名].isin([值1, 值2, 值3])
      • 布尔索引df[df[列索引名].isin([值1, 值2, 值3])]

2.3.3 统计运算

  • count, meanstdminmax
  • idnmax()idxmin()返回最大值、最小值的索引
  • 上述两中API都有一个参数axis,默认为0表示按列进行运算,当axis=1时表示按行进行运算,但是一般也没有什么实际意义
  • describle()
    • 综合分析,能够直接得出上述统计 结果
    • 代码示例
      import pandas as pd
      import numpy as np
      
      a1 = np.random.normal(0,1.0,(7,5))
      
      # 添加行索引
      INDEX = ["第{}行".format(i) for i in range(7)]
      # 添加列索引
      COLUMN = ["第{}列".format(i) for i in range(5)]
      
      df = pd.DataFrame(a1, index=INDEX, columns= COLUMN)
      
      print("-------df-------")
      print(df)
      
      print("-------df.describe()-------")
      print(df.describe())
      
      
    • 结果
      在这里插入图片描述

2.3.4 累计统计函数

  • cumsum累加,计算前n个数的和
  • cummax累计求最大,计算前1、2、3……n个数的最大值
  • cummin累计求最小,计算前1、2、3……n个数的最小值
  • cumprod累乘,计算前n个数的积
  • 使用方法:
    • 在DataFrame中拿出一个Series后面.函数名()即可

2.3.5 自定义运算

  • apply(func, axis=0)
    • func: 自定义函数
    • axis=0 默认是按列进行运算,axis=1为按行进行运算
  • 例子:设计一个函数,计算每一列的最大值和最小值之差
    • df.apply(lambda x: x.max() - x.min())

2.4 Pandas画图

2.4.1 pandas.DataFrame.plot

  • DataFrame.plot (x=None,y=None,kind='line')
    • x: label or position,default None
    • y: label,position or list of label,positions,default None
      • Allows plotting of one column versus another
    • kind: str
      • ‘line’: line plot(default)
      • ‘bar’: vertical bar plot
      • ‘barh’: horizontal bar plot
      • ‘hist’: histogram
      • ‘pie’: pie plot
      • ‘scatter’: scatter plot

2.4.2 pandas.Series.plot

2.5 文件读取与存储

2.5.1 csv文件的读取与存储

  • pandas.read_csv(filepath_or_buffer, sep=',',delimiter=None)
    • filepath_or_buffer:文件路径
    • usecols:指定读取的列名,列表形式
    • names:一个字符串列表,用于指定列索引名称
  • DataFrame.to_csv(path_or_buf=None, sep=',', columns=None, header=True, index=True, index_label=None, mode='w',encoding=None)
    • path_or_buf: 文件路径
    • sep:分隔符,默认为,
    • columns:选择要写进文件的是哪几列
    • mode:w:重写,a:追加
    • index:是否写进行索引
    • header:是否写进列索引

4.5.2 HDF5文件的读取与存储

4.5.3 Json文件的读取与存储

  • pandas_read_json(path)
    • orient=“records”
    • lines:布尔值,是否按照每行读取json对象,默认为False,一般得改成True
  • DataFrame.to_json(path)
    • orient=“records”
    • lines:布尔值,是否按照每行读取json对象,默认为False,一般得改成True
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Numpy&Pandas 数据处理与挖掘 的相关文章

  • 通过 python 中的另外两个修改数组[重复]

    这个问题在这里已经有答案了 假设我们有三个一维数组 A 长度为 5 B 长度相同 示例中为5 C 更长 比如长度为 100 C最初用零填充 A给出索引C应更改的元素 它们可能会重复 以及B给出应添加到初始零的值C 例如 如果A 1 3 3
  • 使用 NumPy 编写一个函数来计算具有特定公差的积分

    我想编写一个自定义函数来以特定容差对表达式 python 或 lambda 函数 进行数字积分 我知道与scipy integrate quad人们可以简单地改变epsabs但我想使用 numpy 自己编写该函数 From 这篇博文 htt
  • 无法在 virtualenv 中安装 libxml2

    我有一个问题libxml2蟒蛇模块 我正在尝试将其安装在python3 虚拟环境使用以下命令 pip install libxml2 python3 但它显示以下错误 Collecting libxml2 python3 Using cac
  • django 模板 - 如何动态访问变量?

    假设我有一个具有以下上下文的 django 模板 data1 this is data1 data2 this is data2 data name data2 现在我知道了data name 假设它是 data2 是否可以用它来访问变量d
  • 用 Python 绘制直方图

    我有两个列表 x 和 y x 包含字母表 A Z Y 包含它们在文件中的频率 我尝试研究如何在直方图中绘制这些值 但在理解如何绘制它方面没有成功 n bins patches plt hist x 26 normed 1 facecolor
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • 设置高亮大括号的 vim 颜色主题

    如何更改突出显示大括号的 vim 配色方案 我希望实际编辑 vim 主题文件以使更改永久生效 问候 克雷格 匹配括号的自动高亮颜色称为MatchParen 您可以通过执行以下操作来更改 vimrc 中的颜色 highlight MatchP
  • 使用 Python 绘制 USGS 水文数据甘特图?

    我编译了一个数据帧 其中包含几个不同流计的 USGS 流数据 现在我想创建一个类似的甘特图this https stackoverflow com questions 31820578 how to plot stacked event d
  • Python:在字典中查找具有唯一值的键?

    我收到一个字典作为输入 并且想要返回一个键列表 其中字典值在该字典的范围内是唯一的 我将用一个例子来澄清 假设我的输入是字典 a 构造如下 a dict a cat 1 a fish 1 a dog 2 lt unique a bat 3
  • Seaborn 中没有线性拟合的散点图

    我想知道是否有办法关闭seaborn中的线性拟合lmplot或者是否有一个等效函数可以生成散点图 当然 我也可以使用 matplotlib 但是 我发现 seaborn 中的语法和美学非常吸引人 例如 我想绘制以下情节 import sea
  • Django 2、python 3.4 无法解码 urlsafe_base64_decode(uidb64)

    我正在尝试通过电子邮件激活用户 电子邮件有效 编码有效 我使用了 django1 11 中的方法 该方法运行成功 在 Django 1 11 中 以下内容成功解码为 28 其中 uidb64 b Mjg force text urlsafe
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • 如何展平解析树并存储在字符串中以进行进一步的字符串操作 python nltk

    我正在尝试从树结构中获取扁平树 如下所示 我想将整个树放在一个字符串中 就像没有检测到坏树错误一样 S NP SBJ NP DT The JJ high JJ seven day PP IN of NP DT the CD 400 NNS
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • 无需访问 Internet 即可部署 Django 的简单方法?

    我拥有的是使用 Django 开发的 Intranet 站点的开发版本以及放置在 virtualenv 中的一些外部库 它运行良好 我可以在任何具有互联网连接的计算机上使用相同的参数 使用 pip 轻松设置 virtualenv 但是 不幸
  • Python 读取未格式化的直接访问 Fortran 90 给出不正确的输出

    这是数据的写入方式 它是一个二维浮点矩阵 我不确定大小 open unit 51 file rmsd nn output form unformatted access direct status replace recl Npoints
  • pandas.read_fwf 忽略提供的数据类型

    我正在从文本文件导入数据框 我想指定列的数据类型 但 pandas 似乎忽略了dtype input 一个工作示例 from io import StringIO import pandas as pd string USAF WBAN S
  • 使用 pandas 单元格中列表的长度选择行[重复]

    这个问题在这里已经有答案了 我有一张表 df a b c 1 x y x 2 x z c d 3 x t e f g 只是想知道如何使用 c 列的长度选择行 such as df loc len df c gt 1 我知道这是不对的 正确的
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to
  • Biopython 可以执行 Seq.find() 来解释歧义代码吗

    我希望能够在 Seq 对象中搜索考虑歧义代码的子序列 Seq 对象 例如 以下内容应该是正确的 from Bio Seq import Seq from Bio Alphabet IUPAC import IUPACAmbiguousDNA

随机推荐

  • [非线性控制理论]4_反馈线性化_反步法

    非线性控制理论 1 Lyapunov直接方法 非线性控制理论 2 不变性原理 非线性控制理论 3 基础反馈稳定控制器设计 非线性控制理论 4 反馈线性化 反步法 非线性控制理论 5 自适应控制器 Adaptive controller 非线
  • C语言编译器

    C语言编译器是指用于将C语言源代码转换成可执行程序的工具软件 编译器将C语言源程序转化为目标代码的过程称为编译 目标代码通常是机器码 可由计算机直接执行 常见的C语言编译器有 GCC GNU Compiler Collection GNU编
  • 【C++入门】文件流(fstream)介绍和使用

    1 打开函数 open mode 含义 ios in 以读取方式打开文件 ios out 以写入方式打开文件 ios binary 以二进制方式存取 ios ate 存取指针在文件末尾 ios app 写入时采用追加方式 ios trunc
  • 一个 SPI 转串口驱动的优化

    rel File List href file C 5CDOCUME 7E1 5Czjujoe 5CLOCALS 7E1 5CTemp 5Cmsohtml1 5C01 5Cclip filelist xml gt 一个 SPI 转串口驱动的
  • JavaScript动态加载CSS的三种方法

    JavaScript动态加载CSS的三种方法 CSDN Blog推出文章指数概念 文章指数是对Blog文章综合评分后推算出的 综合评分项分别是该文章的点击量 回复次数 被网摘收录数量 文章长度和文章类型 满分100 每月更新一次 如果你有很
  • 程序员也要学英语——印欧语音变规律总结

    目录 一 印欧语音变规律 二 口诀汇总 三 元音互换 a e i o u w y 1 词根 uni 一 统一 2 词根 tri 三 四 u v w 1 词根 nov 新 2 词根 vol 意愿 五 b p m f v 1 词根 bene 好
  • U3D打包DLL插件 DLL Builder

    前面的文章讲过如何通过cmd打包dll文件 文章链接 实际中 需求一般是很多文件需要打包到一个dll时 此时 一个一个添加打包吗 这里介绍一个很不错的插件 DLL Builder 商店地址 九块九 包邮 这是一个可视化的dll打包工具 可以
  • 小米SOAR

    小米soar工具安装 系统Ubuntu 18 04 更新下apt get包 防止报错 sudo apt get update sudo apt get install sudo apt get upgrade 安装Go语言 sudo apt
  • 如何在C语言中进行字符串的查找操作?

    首先 要进行字符串的查找操作 我们需要使用到C语言中的字符串函数 这些函数包括strlen strcmp strcat strcpy strstr 等等 它们可以实现字符串的长度计算 比较 拼接 复制 查找等操作 如果要在一个字符串中查找另
  • git clone和直接下载压缩包的区别

    目录 一 区别 一 区别 Git是公司开发中必不可少的一项基础技能 很多大型企业经常会有自己的内网 在内网直接下载压缩包后 写完业务后在进行远程ssh的绑定是无法绑定上的 因为公司内网对这种绑定作出了限制 而上司邀请你有开发权限后 直接使用
  • C++ main函数中参数argc和argv含义及用法( argument count和 argument vector)

    rgc 是 argument count的缩写 表示传入main函数的参数个数 argv 是 argument vector的缩写 注意 不是argument value的缩写 自己以前理解错了 表示传入main函数的参数序列或指针 并且第
  • Paxos与2PC

    Paxos与2PC Paxos协议和2PC协议在分布式系统中所起的作用并不相同 Paxos协议用于保证同一个数据分片的多个副本之间的数据一致性 当这些副本分布到不同的数据中心时 这个需求尤其强烈 2PC协议用于保证属于多个数据分片上的操作的
  • Winclone Pro for Mac(Windows分区备份还原工具)

    Winclone Pro for Mac一款Windows分区备份还原工具 winclone pro mac版保护您的Boot Camp Windows系统免受数据丢失以及将Boot Camp分区移动到新Mac的完整解决方案 Winclon
  • java返回值float_Java Float类的compare()方法与示例

    Float类compare 方法compare 方法在java lang包中可用 compare 方法用于检查给定两个浮点值的相等或不相等 换句话说 可以说此方法用于比较两个浮点值 compare 方法是一个静态方法 也可以使用类名进行访问
  • 爬虫手册05 异步爬虫

    异步爬虫 目标 例举asyncio和aiohttp模块的常规用法代码 关于协程概念参考 https blog csdn net weixin 40743639 article details 122394616 spm 1001 2014
  • 线程安全同步问题

    需求 模拟3个窗口同时在售50张 票 问题1 为什么50张票被卖出了150次 出现 的原因 因为num是非静态的 非静态的成员变量数据是在每个对象中都会维护一份数据的 三个线程对象就会有三份 解决方案 把num票数共享出来给三个线程对象使用
  • Unity3D打包发生错误 "The type or namespace name `UnityEditor' could not be found"(小心使用)

    这句话是说明UnityEditor未发现 主要是某个脚本里写了关于Editor相关的函数 首先我们需要知道 使用UnityEditor的时候 一般是在自己项目调试运行的时候使用 而打包出来生成文件的时候 这个命令是没法在文件中使用的 所以就
  • 陷波器的离散化及仿真验证

    一 陷波器在连续域的传递函数 1 最基本的陷波器传函 1 其中 wo 是所谓 中心频率 也就是你想要 陷掉 的频率 而 则是 陷阱 的宽度 根据公式可以发现 当输入信号频率很小 s 0 或者很大 s 的时候 上面式子的值是1 当输入信号频率
  • IT项目管理大作业个人报告

    承担角色 1 学习资源共享平台项目分析与设计 整合前期研究文档 编写学习资源共享平台的项目分析与设计报告 给出了我们大作业项目的项目背景 需求概述 功能设计以及与国内相似产品的对比 整合队员们的文档 成果可见 https github co
  • Numpy&Pandas 数据处理与挖掘

    笔记来源B站 https www bilibili com video BV1xt411v7z9 p 21 python学习笔记 1 Numpy 1 1 Numpy优势 1 1 1 Numpy介绍 1 1 2 ndarray介绍 1 1 3