zoukankan      html  css  js  c++  java
  • Pandas 记录

    过滤不为空的数据

    df[df['PLANR']=='']

    获取某列某行数据(某个单元格数据)

    df['MNG02'][0]

    根据判断条件筛选数据

    df[df['DAT00'] < temp_time]

    获取整列数据集合

    tmp_df.get('DAT00').unique()

    从原来的dataFrame中提取需要的列 组成新的dataFrame

    dataFrame[['col1','col2','col3']]

    dataFrame进行分组

    dataFrame.groupby(['col1','col2','col3']).sum()

    重置索引

    df.reset_index()

    创建新DataFrame
    新建一个字典,key作为列名
    data = {'Name': ['mark', 'jack', 'james', 'kobe', 'alias'], 'Age': [13, 13, 14, 15, 16],
    'Sex': ['F', 'F', 'M', 'M', 'M'],
    'Job': ['wait', 'eat', 'computor', 'drink', 'sleep']}
    pd.DataFrame(data)

    df['columnName'] 类型Serials
    df[['columnName']] 类型DataFrame
    df.shape (行数,列数)


    添加新列
    1.df['columnName'] = value
    2.df.insert(columnIndex, 'columnName', 'value')

    设置索引
    df.set_index('columnName')

    根据索引获取需要的行数据(没有索引获取不到)
    df.loc['indexName'] type:Serials
    df.loc[['indexName1','indexName2','indexName3']] type:DataFrame

    根据行数获取需要的行数据
    df.iloc['rowNumber'] type:Serials
    df.iloc[['rowNumber1','rowNumber2','rowNumber3']] type:DataFrame

    获取指定的行数和列数
    df.iloc[:3, :4] 选取前3行和前4列
    df.iloc[:, [4,6]] 选取两列的所有的行
    df.iloc[[100, 200], [7, 15]] 选取不连续的行和列
    df.loc[:, ['columnName1', 'columnName2']] loc实现同上功能

    获取df中指定的数据值
    df.iloc['rowNumber','colNumber']
    df.loc['indexName','columnName']

    根据列名从原始数据集中抽取需要的数据,结果集(行数不变,列数减少)
    df[['columnName1','columnName2','columnName3']]

    根据bool值进行数据提取,条件必须是bool类型数组,并且数组的大小与行数一致
    df[[True,True,False]] :获取前2行
    df[df['Age'] == 12] :获取Age为12的行数据
    df[(df['Age'] == 12) & (df['Name'] = 'jack')] :根据多个条件获取数据,括号必须,因为&运算符高于逻辑运算符

    根据指定列进行排序
    df.sort_values('columnName', ascending=False) ascending=False 降序 默认升序

    数据去重
    df.drop_duplicates(subset='columnName') subset:指定根据某列中的数据去重,默认采用全部数据列
    """

    """
    Serials操作
    ss = df['columnName'] 获取df中某一列,返回Serials

    获取第几个值
    ss.iloc['int']
    ss['int']

    获取多个值
    ss.iloc[['int1','int2','int3']]
    ss[['int1','int2','int3']]

    loc只接收行索引标签(没有索引获取不到数据)
    ss.loc['indexName']

    修改列名
    df.rename(columns={'oldColumnName':'newColumnName'})
    df.columns = ['newColumnName1', 'newColumnName2', 'newColumnName3']

    分组、聚合的多种方式
    df.groupby(['columnName1','columnName2','columnName3']).sum()
    df.groupby(['columnName1','columnName2']).agg({'columnName3':['f1','f2'],'columnName4:[f3,f4]'}) :通过2个字段进行分组后,指定columnName3和columnName4进行2种不同聚合函数的计算
    df.groupby(['columnName1'])['columnName2','columnName3'].agg(['f1','f2']) 通过一个字段进行分组,指定2个字段进行指定的聚合函数计算

    unstack('indexNumber') 行转列 参数 索引的level 比如 第一列索引输入0,第二列索引输入1,若只有2个索引,输入了2,异常,必须是索引列
    unstack('indexName')

    stack('indexNumber') 列转行
    stack('indexName') 列转行

    pandas合并
    数据直接合并,没有任何删减
    pd1.concat(pd2)

    4. concat, join, 和merge的区别
    concat :
    Pandas函数
    可以垂直和水平地连接两个或多个pandas对象(唯一一个可以垂直合并的函数,append内部采用的也是concat函数)
    只用索引对齐
    索引出现重复值时会报错
    默认是外连接(也可以设为内连接)
    join :
    DataFrame方法
    只能水平连接两个或多个pandas对象
    对齐是靠被调用的DataFrame的列索引或行索引和另一个对象的行索引(不能
    是列索引)
    通过笛卡尔积处理重复的索引值
    默认是左连接(也可以设为内连接、外连接和右连接)
    merge :
    DataFrame方法
    只能水平连接两个DataFrame对象
    对齐是靠被调用的DataFrame的列或行索引和另一个DataFrame的列或行索引
    通过笛卡尔积处理重复的索引值
    默认是内连接(也可以设为左连接、外连接、右连接)


    pandas从数据库获取数据后,会将数据加载到内存,,差不多1g内存100w行数据
    pandas到处数据至csv、hdf5,100w行/200M

    ------------------------------------------------------------------------------------
    vaex
    vaex的hdf5坑:vaex只支持自身保持的hdf5格式,所以需要使用vaex的hdf5功能,步骤如下:
    1.先利用pandas获取需要的dataFrame
    2.使用v1=vaex.from_pandas(dataFrame) 将dataFrame转换成vaex支持的dataFrame
    3.将获取的数据集导出成vaex本身支持的hdf5 v1.export_hdf5('store.h5')
    以上步骤就已经有了vaex本身支持的hdf5文件了,可以大胆的使用vaex来进行快速的数据分析了
    加载
    df = vaex.open('store.h5') vaex的操作基本都是毫秒级
    df的过滤操作
    cl_order[(cl_order.ITEM == '1160XW717') & (cl_order.CLOSE_TIME < np.datetime64(datetime(2019,10,2))) & (cl_order.CLOSE_TIME>=np.datetime64(datetime(2019,10,1)))]
    vaex如果数据量大,那么在进行groupby的时候,几乎就不会动了

    datetime64[ns]转datetime 需要先转到datetime64[s] np.datetime64(x,'s').item().hour x为datetime64[ns]对象,item()后为datetime对象



  • 相关阅读:
    我的Java学习路线图
    请求重定向和请求转发的区别
    PHP代码审计学习-php安全基础
    无密码正向直连内网linux目标机复现
    Windows API 学习
    Http请求走私
    免杀手法-tcp套字节传递shellcode学习
    自启动模块构造-计划任务
    自启动模块构造-快速启动目录
    进程注入免杀学习
  • 原文地址:https://www.cnblogs.com/zst-blogs/p/11678722.html
Copyright © 2011-2022 走看看