当前位置: 首页 > news >正文

python函数手册 stata_Python与Stata数据交互之时间变量

本篇将继续介绍Python与Stata的数据交互过程中的时间变量处理的问题。

在开始介绍之前,通知一下:本文,包括之前部分文章的源代码已经托管至github上了,地址:"https://github.com/zhangdashenqi/",请需要的同学自取。

1. 使用Stata函数处理

在上一篇(传送门:张大神气:Python与Stata的数据交互),我们介绍了在Stata16中Python和Stata的数据交互问题,但对于时间变量的处理还没有解决。这一篇将基于上一篇继续解决时间变量的处理问题。

首先,我们使用Stata中的时间函数来解决这个问题,代码如下:

clear

python:

from sfi import Data

import numpy as np

import tushare as ts

# 定义数据类型

intList = [np.int8, np.int16, np.int32, np.int64,

np.uint8, np.uint16, np.uint32, np.uint64]

floatList = [np.float16, np.float32, np.float64]

# 获取数据

df = ts.get_hist_data('hs300')

df = df.reset_index() # 将索引转化为列

# 添加变量

Data.addObs(df.shape[0])

for i in range(0, df.shape[1]):

if df.iloc[:, i].dtype in intList:

Data.addVarInt(df.iloc[:, i].name)

elif df.iloc[:, i].dtype in floatList:

Data.addVarFloat(df.iloc[:, i].name)

else:

Data.addVarStrL(df.iloc[:, i].name)

# 存储数据

for i in range(0, df.shape[1]):

Data.store(df.iloc[:, i].name, None, df.iloc[:, i])

end

br

gen date2 = date(date, "YMD")

format date2 %tdCCYY-NN-DD

order date*

第35行,我们根据字符串变量date使用Stata内置函数date()来生成日期变量date2。

第36行,设置日期变量date2的显示形式。

结果如下:

2. 使用Python处理

这里我们首先要从sfi模块中导入Datetime类,使用Datetime类中的相关方法完成处理时间变量的操作。

代码如下:

clear

python:

from sfi import Data, Datetime

import pandas as pd

import numpy as np

import tushare as ts

# 定义数据类型

intList = [np.int8, np.int16, np.int32, np.int64,

np.uint8, np.uint16, np.uint32, np.uint64]

floatList = [np.float16, np.float32, np.float64]

# 获取数据

df = ts.get_hist_data('hs300')

# df = df.reset_index() # 将索引转化为列

# 处理时间变量

df.index = pd.to_datetime(df.index.tolist()) # 将object转换为Datetime

dateSIF = [Datetime.getSIF(i, '%tdCCYY-NN-DD') for i in df.index]

# 添加变量

Data.addObs(df.shape[0])

Data.addVarFloat('date') # 添加Date变量

for i in range(0, df.shape[1]):

if df.iloc[:, i].dtype in intList:

Data.addVarInt(df.iloc[:, i].name)

elif df.iloc[:, i].dtype in floatList:

Data.addVarFloat(df.iloc[:, i].name)

else:

Data.addVarStrL(df.iloc[:, i].name)

# 存储数据

Data.store('date', None, dateSIF) # 存储时间变量

Data.setVarFormat('date', '%tdCCYY-NN-DD') # 设置变量形式

for i in range(0, df.shape[1]):

Data.store(df.iloc[:, i].name, None, df.iloc[:, i])

end

br

第19行,数据df的索引的数据类型本来是numpy.object类型,这里我们使用Pandas内置方法pd.to_datetime()将其索引类型转变为Datetime类型。

第20行,使用sfi模块中的Datetime.getSIF()方法将上述索引通过列表推导式转换为一个列表。SIF即Stata Internal Form,是Stata以数字形式存储时间变量的一种格式(类似于时间戳的概念)。

第25行,上述代码得到的dateSIF是一个浮点数组成的列表,因此,我们需要添加浮点数变量以存储时间变量。 第36行,将dateSIF存储到之前定义的时间变量date中。

第37行,使用Data.setVarFormat()设置时间变量的显示形式。

结果如下:

可以看出,生成的date变量都是日期类型的变量。

3. 一些改进

上述代码,在迭代的时候使用的是下标迭代的方式,这种方式简单且容易理解,但对于变量很多的情况,速度就会比较慢。

幸好,Pandas自身提供了一些迭代的方法,如下代码的第20~27行。这里请感兴趣的同学去参看Pandas的文档,我就不再赘述了。

clear

python:

from sfi import Data

import numpy as np

import tushare as ts

# 定义数据类型

intList = [np.int8, np.int16, np.int32, np.int64,

np.uint8, np.uint16, np.uint32, np.uint64]

floatList = [np.float16, np.float32, np.float64]

# 获取数据

df = ts.get_hist_data('hs300')

df = df.reset_index() # 将索引转化为列

# 添加变量

Data.addObs(df.shape[0])

for item, frame in df.iteritems():

if frame.dtype in intList:

Data.addVarInt(item)

elif frame.dtype in floatList:

Data.addVarFloat(item)

else:

Data.addVarStrL(item)

Data.store(item, None, frame) # 存储数据

end

br

完~

相关文章:

  • 知音少,弦断有谁听
  • python server酱_Python3和Server酱实现微信通知
  • 潜龙勿用,蓄积待用
  • python 不等于None 不等于空_python中输入0.1+0.2结果却不等于0.3?原来编程语言是这么算的……...
  • ihtml2document能不能根据id获取dom_javascript的DOM对象
  • 《高级分形艺术——核心算法、软件实现及创作技巧》
  • c语言fread函数的用法_Sparklyr 1.2支持foreach函数了
  • 一段对话,解决一个Exchange问题
  • ucosiii源码分析笔记 pdf下载_方舟编译器学习笔记14 DriverRunner源码分析
  • wxWidgets在windows VC++下的安装
  • python serial_浅谈python中的多线程和多进程
  • StatCVS 对使用CVS的项目进行深入统计的开源工具
  • 2020无人用的邮箱和密码大全_2020年之微波炉怎么用 微波炉使用注意事项大全
  • 用C原生API写Symbian日志文件
  • go make function_Go中复制文件的3种技巧
  • SegmentFault for Android 3.0 发布
  • C语言笔记(第一章:C语言编程)
  • Effective Java 笔记(一)
  • gcc介绍及安装
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Javascript基础之Array数组API
  • Java-详解HashMap
  • NSTimer学习笔记
  • Service Worker
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从零开始学习部署
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 每天10道Java面试题,跟我走,offer有!
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 浅谈Golang中select的用法
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 什么是Javascript函数节流?
  • 无服务器化是企业 IT 架构的未来吗?
  • 线性表及其算法(java实现)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 自制字幕遮挡器
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #pragma once
  • (30)数组元素和与数字和的绝对差
  • (52)只出现一次的数字III
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (简单) HDU 2612 Find a way,BFS。
  • (三分钟)速览传统边缘检测算子
  • (四)Linux Shell编程——输入输出重定向
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)深入super,看Python如何解决钻石继承难题
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**