精华内容
下载资源
问答
  • Python Dataframe pandas 将数据分割成时间跨度相等的数据块 有如下dataframe格式的数据,列名分别为date、ip,我需要统计每5s内出现的ip,以及这些ip出现的频数。

    先上数据,有如下dataframe格式的数据,列名分别为date、ip,我需要统计每5s内出现的ip,以及这些ip出现的频数。

            ip                  date
    0   127.0.0.21  15/Jul/2017:18:22:16
    1   127.0.0.13  15/Jul/2017:18:22:16
    2   127.0.0.11  15/Jul/2017:18:22:17
    3   127.0.0.11  15/Jul/2017:18:22:20
    4   127.0.0.21  15/Jul/2017:18:22:21
    5   127.0.0.13  15/Jul/2017:18:22:22
    6   127.0.0.14  15/Jul/2017:18:26:36
    7   127.0.0.16  15/Jul/2017:18:32:15
    8   127.0.0.11  15/Jul/2017:18:36:03

    在网上找了很久但是没看到python的相关答案,但在stackoverflow找到了R语言的解法,有兴趣可以看看
    受它的启发,我用不太优雅的方式实现了我的需求,有更好解决方法的请不吝赐教:

    step1: 将数据中日期格式变为标准格式

    #date_ip为我的dataframe数据
    date_ip['date'] = pd.to_datetime(date_ip['date'], format='%d/%b/%Y:%H:%M:%S')

    step2: 将数据的开始时间、结束时间,按5s分割(由于时间段可能不是恰好是5s的倍数,为避免最后一个时间丢失,因此在最后加上5s)

    frequency = 5
    time_range = pd.date_range(date_ip['date'][0], date_ip['date'][date_ip.shape[0]-1]+frequency*Second(), freq='%sS'%frequency)
    

    step3: 将date变为索引

    date_ip = date_ip.set_index('date')

    step4: 对每个时间段内的数据进行频数计算(由于通过标签切片时会包含头、尾数据,为避免重复计算,因此在尾部减1s)

    for i in xrange(0,len(time_range)-1):
        print get_frequency(date_ip.loc[time_range[i]:time_range[i+1]-1*Second()])

    完整的代码

    import pandas as pd
    from pandas.tseries.offsets import Second
    def get_frequency(date_ip):
        ip_frequency = {}
        for i in xrange(0,date_ip.shape[0]):
            ip_frequency[date_ip['ip'][i]] = ip_frequency.get(date_ip['ip'][i], 0) + 1
        return ip_frequency,date_ip.shape[0]
    
    if __name__ == '__main__': 
        date_ip['date'] = pd.to_datetime(date_ip['date'], format='%d/%b/%Y:%H:%M:%S')
    
        frequency = 5
        time_range = pd.date_range(date_ip['date'][0], date_ip['date'][date_ip.shape[0]-1]+frequency*Second(), freq='%sS'%frequency)  
        date_ip = date_ip.set_index('date')
        for i in xrange(0, len(time_range) - 1):
            print get_frequency(date_ip.loc[time_range[i]:time_range[i + 1]-1*Second()])

    文章开头数据运行结果:

    ({'127.0.0.21' : 1, '127.0.0.13' : 1, '127.0.0.11' : 2}, 4)
    ({'127.0.0.21': 1, '127.0.0.13': 1}, 2)
    ({'127.0.0.14': 1}, 1)
    ({'127.0.0.16': 1}, 1)
    ({'127.0.0.11': 1}, 1)
    展开全文
  • 数据从星期一到星期五的日线数据形成周线数据,然后想定位到所对应的周线数据的情况,就可以通过 backfill参数实现。 data_day_df.index.get_loc(current_kline.open_time, method='backfill') ...

    数据从星期一到星期五的日线数据形成周线数据,然后想定位到所对应的周线数据的情况,就可以通过

    backfill参数实现。

    data_day_df.index.get_loc(current_kline.open_time, method='backfill')

    open_time为当前的日线级数据。运算后得到周线数据。

    展开全文
  • spark dateframe 到pandas dataframe pandas_df = schemaPeople.toPandas() pandas dateFrame 转换成 sparkDatefreame sparkdataframe = spark.createDataFrame(pandas_df) sparkdataframe = spark....

    spark dateframe 到pandas dataframe  

    pandas_df = schemaPeople.toPandas()
    
    
     

    pandas dateFrame 转换成 sparkDatefreame 

    sparkdataframe = spark.createDataFrame(pandas_df)
    sparkdataframe = spark.createDataFrame(pandas_df,schema)
    展开全文
  • Spark中DataFramePandasDataFrame的区别

    千次阅读 多人点赞 2019-08-20 00:24:32
    Pandas DataFrame 数据结构特性 Spark DataFrame 数据结构与存储特性 使用 Spark DataFrame 优势 Spark toPandas 详解 Spark与Pandas中的DataFrame的区别 为何使用 PySpark DataFrame 使用 pandas 进行数据...

    目录

    为何使用 PySpark DataFrame

    Pandas DataFrame 数据结构特性

    Spark DataFrame 数据结构与存储特性

    使用 Spark DataFrame 优势

    Spark toPandas 详解

    Spark与Pandas中的DataFrame的区别


    为何使用 PySpark DataFrame

    使用 pandas 进行数据处理,dataframe 常作为主力军出现。基于单机操作的 pandas dataframe 是一种表格形数据结构,拥有丰富、灵活、操作简单的 api,在数据量不大的情况下有较好的效果。

    对于大数据量的运算,分布式计算能突破 pandas 的瓶颈,而 Spark 则是分布式计算的典型代表。 Spark 中有三类数据 api,RDD、DataFrame 和 Datasets(支持多种主流语言操作),在 spark2.0 中出现 Datasets 的概念,其中 DataFrame 也称 Datasets[row],python 中只有 DataFrame 的概念。

    DataFrame 是基于 RDD 的一种数据类型,具有比 RDD 节省空间和更高运算效率的优点,对于使用 python 操作 spark 且熟悉 pandas 基本操作的工作者是一个好消息。

    Pandas DataFrame 数据结构特性

    DataFrame 是一种表格型数据结构,按照列结构存储,它含有一组有序的列,每列可以是不同的值,但每一列只能有一种数据类型。DataFrame 既有行索引,也有列索引,它可以看作是由 Series 组成的字典,不过这些 Series 公用一个索引(可以参考下图的数据结构轴线图)。

     


    依赖 python 这一简洁明了的语言,dataframe 操作比较简洁,此外 dataframe 还拥有比较丰富的操作 api 接口,能比较容易实现中小型数据集的操作。

    Spark DataFrame 数据结构与存储特性

    在 Spark 中, DataFrame 是基于 RDD 实现的,一个以命名列方式组织的分布式数据集。实际存储与 RDD 一致,基于行存储,但是 Spark 框架本身不了解 RDD 数据的内部结构,而 DataFrame 却提供了详细的结构信息 (Schema),Spark DataFrame 将数据以单独表结构,分散在分布式集群的各台机器上,所以 spark dataframe 是天然的分布式表结构,具体差异可以参考下图。

     

    使用 Spark DataFrame 优势

    DataFrame 基于 RDD 的抽象,由于 DataFrame 具有定义好的结构, Spark 可以在作业运行时应用许多性能增强的方法。spark 对于 DataFrame 在执行时间和内存使用上相对于 RDD 有极大的优化。Catalyst 优化引擎使执行时间减少 75%, Project Tungsten Off-heap 内存管理使内存使用量减少 75 +%,无垃圾回收器。使用 DataFrame 比普通 Python RDD(下图中 Python API)实现的快 4 倍,比 Scala RDD(下图中 Scala API)实现快 2 倍。经过 Catalyst 优化后的代码比解释型代码明显快很多。下图给出了 DataFrame 执行速度和空间上的优势。

     


    虽说 Spark DataFrame 与 SparkSql 本质上都是实现 sql 的操作,但是 DataFrame 操作不需要像 SparkSql 操作过程中多建一些临时表,且运行性能相对较优(如下图所示),从 Spark 1.3.0 版本开始重点发展 DataFrame;DataFrame 超低的大数据开发入门门槛,完美的避免了不太熟悉的函数式编程,相应地面向对象的编程方式(参考以下自定义基于 DataFrame 的 top K 实现)更符合时代的潮流。

     

    
     

    Spark toPandas 详解

    Spark DataFrame 与 Pandas DataFrame 结构形式是如此相似,肯定会有使用者思考是否有 API 能实现二者之间的互相转换。pandas to spark 自不用说,而 spark to pandas 可以通过 toPandas 这一 api 实现。toPandas 等效对 rdd 先做 collect 然后 to dataframe,是将分布式文件收集导本地的操作,转换后的文件能与 pandas 一样实现所有操作。使用 spark 的本意是对海量数据的操作,而转换导本地的 pandas 操作失去了与其本意相差甚远,所以除非必须单机操作,不建议使用该 api。

    Spark与Pandas中的DataFrame的区别

      Pandas Spark
    工作方式 单机 single machine tool,没有并行机制 parallelism
    不支持 Hadoop,处理大量数据有瓶颈
    分布式并行计算框架,内建并行机制 parallelism,所有的数据和操作自动并行分布在各个集群结点上。以处理 in-memory 数据的方式处理 distributed 数据。
    支持 Hadoop,能处理大量数据
    延迟机制 not lazy-evaluated lazy-evaluated
    内存缓存 单机缓存 persist() or cache() 将转换的 RDDs 保存在内存
    DataFrame 可变性 Pandas 中 DataFrame 是可变的 Spark 中 RDDs 是不可变的,因此 DataFrame 也是不可变的
    创建 从 spark_df 转换:pandas_df = spark_df.toPandas() 从 pandas_df 转换:spark_df = SQLContext.createDataFrame(pandas_df)
    另外,createDataFrame 支持从 list 转换 spark_df,其中 list 元素可以为 tuple,dict,rdd
    list,dict,ndarray 转换 已有的 RDDs 转换
    CSV 数据集读取 结构化数据文件读取
    HDF5 读取 JSON 数据集读取
    EXCEL 读取 Hive 表读取
      外部数据库读取
    index 索引 自动创建 没有 index 索引,若需要需要额外创建该列
    行结构 Series 结构,属于 Pandas DataFrame 结构 Row 结构,属于 Spark DataFrame 结构
    列结构 Series 结构,属于 Pandas DataFrame 结构 Column 结构,属于 Spark DataFrame 结构,如:DataFrame[name: string]
    列名称 不允许重名 允许重名
    修改列名采用 alias 方法
    列添加 df[“xx”] = 0 df.withColumn(“xx”, 0).show() 会报错
    from pyspark.sql import functions
    df.withColumn(“xx”, functions.lit(0)).show()
    列修改 原来有 df[“xx”] 列,df[“xx”] = 1 原来有 df[“xx”] 列,df.withColumn(“xx”, 1).show()
    显示   df 不输出具体内容,输出具体内容用 show 方法
    输出形式:DataFrame[age: bigint, name: string]
    df 输出具体内容 df.show() 输出具体内容
    没有树结构输出形式 以树的形式打印概要:df.printSchema()
      df.collect()
    排序 df.sort_index() 按轴进行排序  
    df.sort() 在列中按值进行排序 df.sort() 在列中按值进行排序
    选择或切片 df.name 输出具体内容 df[] 不输出具体内容,输出具体内容用 show 方法
    df[“name”] 不输出具体内容,输出具体内容用 show 方法
    df[] 输出具体内容,
    df[“name”] 输出具体内容
    df.select() 选择一列或多列
    df.select(“name”)
    切片 df.select(df[‘name’], df[‘age’]+1)
    df[0]
    df.ix[0]
    df.first()
    df.head(2) df.head(2) 或者 df.take(2)
    df.tail(2)  
    切片 df.ix[:3] 或者 df.ix[:”xx”] 或者 df[:”xx”]  
    df.loc[] 通过标签进行选择  
    df.iloc[] 通过位置进行选择  
    过滤 df[df[‘age’]>21] df.filter(df[‘age’]>21) 或者 df.where(df[‘age’]>21)
    整合 df.groupby(“age”)
    df.groupby(“A”).avg(“B”)
    df.groupBy(“age”)
    df.groupBy(“A”).avg(“B”).show() 应用单个函数
    from pyspark.sql import functions
    df.groupBy(“A”).agg(functions.avg(“B”), functions.min(“B”), functions.max(“B”)).show() 应用多个函数
    统计 df.count() 输出每一列的非空行数 df.count() 输出总行数
    df.describe() 描述某些列的 count, mean, std, min, 25%, 50%, 75%, max df.describe() 描述某些列的 count, mean, stddev, min, max
    合并 Pandas 下有 concat 方法,支持轴向合并  
    Pandas 下有 merge 方法,支持多列合并
    同名列自动添加后缀,对应键仅保留一份副本
    Spark 下有 join 方法即 df.join()
    同名列不自动添加后缀,只有键值完全匹配才保留一份副本
    df.join() 支持多列合并  
    df.append() 支持多行合并  
    缺失数据处理 对缺失数据自动添加 NaNs 不自动添加 NaNs,且不抛出错误
    fillna 函数:df.fillna() fillna 函数:df.na.fill()
    dropna 函数:df.dropna() dropna 函数:df.na.drop()
    SQL 语句 import sqlite3
    pd.read_sql(“SELECT name, age FROM people WHERE age>= 13 AND age <= 19″)
    表格注册:把 DataFrame 结构注册成 SQL 语句使用类型
    df.registerTempTable(“people”) 或者 sqlContext.registerDataFrameAsTable(df, “people”)
    sqlContext.sql(“SELECT name, age FROM people WHERE age>= 13 AND age <= 19″)
    功能注册:把函数注册成 SQL 语句使用类型
    sqlContext.registerFunction(“stringLengthString”, lambda x: len(x))
    sqlContext.sql(“SELECT stringLengthString(‘test’)”)
    两者互相转换 pandas_df = spark_df.toPandas() spark_df = sqlContext.createDataFrame(pandas_df)
    函数应用 df.apply(f)将 df 的每一列应用函数 f df.foreach(f) 或者 df.rdd.foreach(f) 将 df 的每一列应用函数 f
    df.foreachPartition(f) 或者 df.rdd.foreachPartition(f) 将 df 的每一块应用函数 f
    map-reduce 操作 map(func, list),reduce(func, list) 返回类型 seq df.map(func),df.reduce(func) 返回类型 seqRDDs
    diff 操作 有 diff 操作,处理时间序列数据(Pandas 会对比当前行与上一行) 没有 diff 操作(Spark 的上下行是相互独立,分布式存储的)
    展开全文
  • Spark DataFramePandas DataFrame差异

    千次阅读 2019-01-10 16:10:14
    Spark DataFramePandas DataFrame差异为何使用pyspark dataframepandas dataframe数据结构特性spark dataframe结构与存储特性spark toPandas详解参考文献 为何使用pyspark dataframe 使用pandas进行数据处理...
  • pandasdataframe转spark的dataframe spark的dataframepandasdataframe pandasdataframe和spark的dataframe互转 dataframe互转
  • 1、pandas dataframe 参考notebook: https://nbviewer.jupyter.org/github/lonngxiang/spark_sql_exmple/blob/master/log_pandas.ipynb 2、pyspark sql dataframe 参考: ...
  • 以及RDD、DataSet、DataFrame之间相互转换,而PySpark可以说是Spark和python的结合体,PySpark中也使用DataFrame,也可以与RDD、DataSet之间相互转换,其实python中有个Pandas库,也有DataFrame,是由多列Series组成...
  • spark DataFramepandas DataFrame互相转换

    千次阅读 2019-04-09 13:25:56
    values = pandas_df.values.tolist() columns = pandas_df.columns.tolist() spark_df = spark.createDataFrame(values, columns) pandas_df = spark_df.toPandas()
  • Pyspark.sql.DataFramepandas.DataFrame之间的相互转换: # pandas转spark values = pandas_df.values.tolist() columns = pandas_df.columns.tolist() spark_df = spark.createDataFrame(values, columns) # ...
  • How to iterate over rows in a DataFrame in Pandas-DataFrame按行迭代
  • sparkDataFramepandas中的DataFrame转换

    千次阅读 2018-05-22 11:33:12
    1.sparkDataFrame的类型为pyspark.sql.dataframe.DataFrame,通过df.toPandas()即可转换为pandas中的dataFrame类型。2.对于pandas中的DataFrame,想要转换为spark类型的,使用sqlContext = SQLContext(SparkContext...
  • pyspark.sql.DataFramepandas.DataFrame之间的相互转换
  • pySpark.DataframePandas

    2020-05-11 21:49:26
    pySpark中将数据toPandas(),但是toPandas()也会运行慢 运行内存不足等问题。 在网上找到一种方法,比自带的toPandas()更快捷。... return [pd.DataFrame(list(rdds))] def to_Pandas(df, n_partitions=None):
  • 一、为什么要将用了pandas.dataframe的程序改为Spark中的dataframe 前者只能单机运行,后者可以集群运行 二、对比 直接跳转这篇博文《Spark与PandasDataFrame对比》,写的很好 三、转化 spark —> pandas ...
  • Pandas DataFrame的基本属性详解

    万次阅读 多人点赞 2019-06-24 19:13:33
    Pandas DataFrame的一些基本属性 基本功能列表 import pandas as pd 导入库 df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) 创建一个DataFrame df.index df.columns df.axes df.T...
  • Delete column from pandas DataFrame - 删除列 stackoverflow 地址:https://stackoverflow.com/questions/13411544/delete-column-from-pandas-dataframe pandas 官方给出了对列的操作,可以参考: ...
  • pypsark的dataframe经常遇到要做groupby的场景,有两种方式可以实现,dataframepandas_udf、rdd的mapValues,后者需要先将dataframe转换成rdd再操作 下面介绍dataframepandas_udf代码实现,由于pandas_udf做...
  • pandas DataFrame数据转为list

    万次阅读 多人点赞 2017-05-21 22:46:10
    首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list,示例代码如下:# -*- coding:utf-8-*- import numpy as np import pandas as pddata_x = pd.read_csv("E:/...
  • 在spark dataFrame 中使用 pandas dataframe

    千次阅读 2018-04-04 11:05:27
    pandas spark 工作方式 单机,无法处理大量数据 分布式,能处理大量数据 存储方式 单机缓存 可以调用 persist/cache 分布式缓存 是否可变 是 否 index索引 自动创建 无索引 行结构 ...
  • pandas.DataFrame()的参数解释

    万次阅读 2018-09-28 00:35:51
    pandas.DataFrame pandas中的DataFrame可以使用以下构造函数创建 - pandas.DataFrame( data, index, columns, dtype, copy)   data表示要传入的数据 ,包括 ndarray,series,map,lists,dict,constant和另...
  • pyspark.sql.dataframe.DataFrame有自带的函数,.toPandas(); 下面是别人写的,但是.collect()那里会报错,用自带的toPandas()会报: Total size of serialized results of 14 tasks (1060.1 MB) is bigger than spark....
  • 首先python加载访问maxcompute包,在这之前需要运维给你开通python访问maxcompute的白...将结果读为数据集dataframe,此处是odps数据集,跟pandas的数据集有不同,不能使用pandas里面的数据集操作,比如设定列名,求数

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,405
精华内容 12,162
关键字:

dataframepandas