关于python 读取csv最快的Datatable的用法,你都学会了吗

2021年7月1日,官方正式发布了1.0Datatable版本。1.0版本支持windows和linux,以及Macos。 具体文档可以见:

https://datatable.readthedocs.io/en/latest/start/using-datatable.html

Datatable与众不同就是快!

需要说明的是,使用Datatable库需要python3.6及以上版本。

import datatable as dt
import pandas as pd
import time
from datetime import date
from datatable import f,update

t0 = time.time()
t1 = time.time()
file = r"C:\Users\songroom\Desktop\000001.csv"
my_table = dt.fread(file,sep=",",header=True)  ## datatable格式
## dt.fread(data, sep=",",header=False, columns=["A","B","C","D"]) 多种设置
t3 = time.time()
print(f"my_table    ->     data type    :{type(my_table)}")
print(f"my_table    ->     data name    : {my_table.names}")
print(f"my_table    ->    (nrows,ncols) : {my_table.shape}") # (nrows, ncols)

my_table -> data type :<class ‘datatable.Frame'>
my_table -> data name : (‘date', ‘open', ‘close', ‘low', ‘high', ‘volume', ‘money', ‘factor', ‘high_limit', ‘low_limit', ‘avg', ‘pre_close', ‘paused', ‘open_interest')
my_table -> (nrows,ncols) : (590880, 14)

print(f"my_table    ->    head(10)      : " )
print(my_table.head(10)) #
print(f" datatable  read_csv cost  time : {t3-t0} s!")

# ## 和pandas 相比

t4 = time.time()
pandas_df = pd.read_csv(file)
t5 = time.time()
print(f" pandas read_csv cost    time     : {t5-t4} s! ")

datatable read_csv cost time : 0.059000492095947266 s!
pandas read_csv cost time : 1.7289988994598389 s!

把读取的csv存成jay文件

把.jay文件读成datatable

t6 = time.time()
my_table.to_jay(r"C:\Users\songroom\Desktop\000001.jay")
t7 = time.time()
print(f"datatable 把数据存放成jay cost time : {t7-t6} s!")
## 把.jay文件读成datatable
t8 = time.process_time_ns() ## 增加精度
table_jay = dt.fread(r"C:\Users\songroom\Desktop\000001.jay")
t9 = time.process_time_ns()
print(f"把.jay文件 读取到datatable cost time : {(t9-t8)/1000000000.0} s !")
print(f".jay文件读取成table_jay 的数据格式    :{type(table_jay)}")

datatable 把数据存放成jay cost time : 0.494002103805542 s! 把.jay文件
读取到datatable cost time : 0.0 s !
.jay文件读取成table_jay 的数据格式 :<class ‘datatable.Frame'>

## 把datatable转成pandas.dataframe
t10 = time.time()
pandas_df = my_table.to_pandas()
t11 = time.time()
print(f"pandas_df  type : {type(pandas_df)}  ")
print(f"datatable 转成  pandas df cost time : {t11-t10} s!")
print(f"{pandas_df.head()}")

pandas_df type : <class ‘pandas.core.frame.DataFrame'> datatable 转成
pandas df cost time : 0.1569967269897461 s!

把dataframe转成datatable

t12 = time.process_time()
my_table_from_df = dt.Frame(pandas_df)
t13 = time.process_time()
print(f"dataframe => datatable  cost time : {t13-t12} s!")
print(f"my_table_from_df type: {type(my_table_from_df)}   pandas_df type : {type(pandas_df)}")

dataframe => datatable cost time : 0.296875 s! my_table_from_df type:
<class ‘datatable.Frame'> pandas_df type : <class
‘pandas.core.frame.DataFrame'>

把datatable 转成 csv保存,把datatalbe扩展10倍,再输出csv

t14 = time.time()
big_table = dt.repeat(my_table, 10) ##
t14_1 = time.time()
big_table.to_csv(r"C:\Users\songroom\Desktop\000001_big.csv")
t15 = time.time()
print(f"big_table  shape (nrows,ncols  ) : {big_table.shape}")
print(f"datatable 扩展10倍        cost time :  {t14_1-t14}s!")
print(f"datatable 落地csv文件   cost time : {t15-t14_1} s!")

big_table shape (nrows,ncols ) : (5908800, 14)
datatable 扩展10倍 cost time : 0.0s!
datatable 落地csv文件 cost time : 9.905611753463745 s!

与各种类型数据的转换:

datatable => arrow()

arr_from_table = my_table.to_arrow()
print(f"{type(arr_from_table)}")

<class ‘pyarrow.lib.Table'>

把dict =>datatable

dict_data = {"dates" : [date(2000, 1, 5), date(2010, 11, 23), date(2020, 2, 29), None],
          "integers" : range(1, 5),
          "floats" : [10.0, 11.5, 12.3, -13],
          "strings" : ['A', 'B', None, 'D']
          }
table_from_dict = dt.Frame(dict_data)
print(f" dict_data type :{type(dict_data)}   table_from_dict type : {type(table_from_dict)} ")

把datatable => dict

dict_from_datatable = my_table.to_dict()
print(f" dict_from_datatable  type :{type(dict_from_datatable)}   my_table type : {type(my_table)} ")

把datatable 取值和过滤

my_table_new  = my_table[:, "close"]

找到符合这两个条件(且)的table,这两个条件要括起来!

table_3800_and    = my_table[(f.close > 3800) & (f.pre_close < 3800),:]

找到符合这两个条件(or)的table,这两个条件要括起来!

table_3800_or    = my_table[(f.close > 3800) | (f.pre_close < 3800),:]
my_table[:, 'date']  ## 选择date列
my_table['date']     ## 同上
my_table[:,["date","close"]] ## 选择 date,close两列
my_table[:,f.close]  ## 选择close
my_table[[1, 2, 3], :] ## 选择相应的行
my_table[range(1, 3), :] ## 选择相应的行

把 datatable 转成list

my_list = my_table_new.to_list()

两个datatable的操作 合并

dt1 = dt.rbind(my_table, table_3800_or) ## 这两个table合并,行上进行合并;列上扩展用rbind()
del dt1[:, ['date', 'close']] ## 删除两列
my_table['low_high'] = my_table[:, (f.low + f.high)/2.0] ## 增加一列,赋值方法
my_table[:, update(mean = (f.low+ f.high +f.close)/3.0)] ## 增加一列,update方法
my_table.names = {"low_high": "lowhigh", "mean": "mean_3"} ## 对两列的字段进行重命名

dict_from_datatable type :<class ‘dict'> my_table type : <class ‘datatable.Frame'>

循环,效率好象比较慢!后面还待观察是否有优化!

nrows,ncols = my_table.shape
tt0 = time.time()
for i in range(nrows):
    values = my_table[i,:]
tt1 = time.time()
print(f"my_table 循环 cost time :{tt1-tt0} s")

my_table 循环 cost time :9.566002130508423 s。效率看起来比较低。

到此这篇关于python 读取csv最快的Datatable的用法的文章就介绍到这了,更多相关python 读取csv内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用python的pandas库读取csv文件保存至mysql数据库

    第一:pandas.read_csv读取本地csv文件为数据框形式 data=pd.read_csv('G:\data_operation\python_book\chapter5\\sales.csv') 第二:如果存在日期格式数据,利用pandas.to_datatime()改变类型 data.iloc[:,1]=pd.to_datetime(data.iloc[:,1]) 注意:=号,这样在原始的数据框中,改变了列的类型 第三:查看列类型 print(data.dtypes) 第四:方法一

  • python读取csv和txt数据转换成向量的实例

    最近写程序需要从文件中读取数据,并把读取的数据转换成向量. 查阅资料之后找到了读取csv文件和txt文件两种方式,下面结合自己的实验过程,做简要记录,供大家参考: 1.读取csv文件的数据 import csv filtpath = "data_test.csv" with open(filtpath,'r') as csvfile: reader = csv.reader(csvfile) header = next(reader) data = [] for line in rea

  • 对python读取zip压缩文件里面的csv数据实例详解

    利用zipfile模块和pandas获取数据,代码比较简单,做个记录吧: # -*- coding: utf-8 -*- """ Created on Tue Aug 21 22:35:59 2018 @author: FanXiaoLei """ from zipfile import ZipFile import pandas as pd myzip=ZipFile('2.zip') f=myzip.open('2.csv') df=pd.r

  • 解决Python中pandas读取*.csv文件出现编码问题

    1.问题 在使用Python中pandas读取csv文件时,由于文件编码格式出现以下问题: Traceback (most recent call last): File "pandas\_libs\parsers.pyx", line 1134, in pandas._libs.parsers.TextReader._convert_tokens File "pandas\_libs\parsers.pyx", line 1240, in pandas._libs

  • Python读取csv文件分隔符设置方法

    Windows下的分隔符默认的是逗号,而MAC的分隔符是分号.拿到一份用分号分割的CSV文件,在Win下是无法正确读取的,因为CSV模块默认调用的是Excel的规则. 所以我们在读取文件的时候需要添加分割符变量. import csv import os cwd = os.getcwd() print ("Current folder is %s" % (cwd) ) csvfile = open( cwd + '\data\eclipse\change-metrics.csv','r

  • python pandas读取csv后,获取列标签的方法

    在Python中,经常会去读csv文件,如下 import pandas as pd import numpy as np df = pd.read_csv("path.csv") data = np.array(df.loc[:,:]) 通过这种方式得到的data,不包含第一行,一般来说,第一行即是列标签.那么如何获取第一行的内容呢.如下 column_headers = list(df.columns.values) 以上这篇python pandas读取csv后,获取列标签的方法

  • Python Pandas批量读取csv文件到dataframe的方法

    PYTHON Pandas批量读取csv文件到DATAFRAME 首先使用glob.glob获得文件路径.然后定义一个列表,读取文件后再使用concat合并读取到的数据. #读取数据 import pandas as pd import numpy as np import glob,os path=r'e:\tj\month\fx1806' file=glob.glob(os.path.join(path, "zq*.xls")) print(file) dl= [] for f i

  • 关于python 读取csv最快的Datatable的用法,你都学会了吗

    2021年7月1日,官方正式发布了1.0Datatable版本.1.0版本支持windows和linux,以及Macos. 具体文档可以见: https://datatable.readthedocs.io/en/latest/start/using-datatable.html Datatable与众不同就是快! 需要说明的是,使用Datatable库需要python3.6及以上版本. import datatable as dt import pandas as pd import time

  • Python读取csv文件做K-means分析详情

    目录 1.运行环境及数据 2.基于时间序列的分析2D 2.1 2000行数据结果展示 2.2 6950行数据结果展示 2.3 300M,约105万行数据结果展示 3.经纬度高程三维坐标分类显示3D-空间点聚类 3.1 2000行数据结果显示 3.2 300M的CSV数据计算显示效果 1.运行环境及数据 Python3.7.PyCharm Community Edition 2021.1.1,win10系统. 使用的库:matplotlib.numpy.sklearn.pandas等 数据:CSV

  • python读取csv文件并把文件放入一个list中的实例讲解

    如下所示: #coding=utf8 ''' 读取CSV文件,把csv文件放在一份list中. ''' import csv class readCSV(object): def __init__(self,path="Demo.csv"): #创建一个属性用来保存要操作CSV的文件 self.path=path try: #打开一个csv文件,并赋予读的权限 self.csvHand=open(self.path,"r") #调用csv的reader函数读取csv

  • python 读取.csv文件数据到数组(矩阵)的实例讲解

    利用numpy库 (缺点:有缺失值就无法读取) 读: import numpy my_matrix = numpy.loadtxt(open("1.csv","rb"),delimiter=",",skiprows=0) 写: numpy.savetxt('2.csv', my_matrix, delimiter = ',') 可能遇到的问题: SyntaxError: (unicode error) 'unicodeescape' codec

  • 使用python读取csv文件快速插入数据库的实例

    如下所示: # -*- coding:utf-8 -*- # auth:ckf # date:20170703 import pandas as pd import cStringIO import warnings from sqlalchemy import create_engine import sys reload(sys) sys.setdefaultencoding('utf8') warnings.filterwarnings('ignore') engine = create_

  • Python读取csv文件实例解析

    这篇文章主要介绍了Python读取csv文件实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建一个csv文件,命名为data.csv,文本内容如下: root,123456,login successfully root,wrong,wrong password wrong,123456,nonexistent username ,123456,username is null root,,password is null 使用Exc

  • 教你用Python读取CSV文件的5种方式

    目录 第一招:简单的读取 第二招:用nametuple 第三招:用tuple类型转换 第四招:用DictReader 第五招:用字典转换 典型的数据集stocks.csv: 一个股票的数据集,其实就是常见的表格数据.有股票代码,价格,日期,时间,价格变动和成交量.这个数据集其实就是一个表格数据,有自己的头部和身体. 第一招:简单的读取 我们先来看一种简单读取方法,先用csv.reader()函数读取文件的句柄f生成一个csv的句柄,其实就是一个迭代器,我们看一下这个reader的源码: 喂给re

  • 利用Python读取CSV文件并计算某一列的均值和方差

    近日需要对excel的csv文件进行处理,求取某银行历年股价的均值方差等一系列数据 文件的构成很简单,部分如下所示 总共有接近七千行数据,主要的工作就是将其中的股价数据提取出来,放入一个数组之中,然后利用numpy模块即可求出需要的数据. 这里利用了csv模块来对文件进行处理,最终实现的代码如下: import csv import numpy as np with open('pingan_stock.csv') as csv_file: row = csv.reader(csv_file,

随机推荐