首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dataframe向新序列列追加数据

dataframe向新序列列追加数据
EN

Stack Overflow用户
提问于 2015-08-27 22:56:48
回答 1查看 310关注 0票数 0

我有一个熊猫DataFrame结构,我想向其中添加另一个列,但我不能使用append、add或insert来完成此操作。

我正在尝试使用Panda的内置函数复制投资组合数据,因为如果我请求的周期低于~1.5年,此脚本不会给我提供正确的数据,而如果我想要,即使是两天的数据也必须获得。下面是我要重写的脚本:

代码语言:javascript
复制
import QSTK.qstkutil.qsdateutil as du
import QSTK.qstkutil.tsutil as tsu
import QSTK.qstkutil.DataAccess as da

import datetime as dt
import matplotlib.pyplot as plt
import pandas as pd

ls_symbols = ["AAPL", "GLD", "GOOG", "$SPX", "XOM"]
dt_start = dt.datetime(2006, 1, 1)
dt_end = dt.datetime(2010, 12, 31)
dt_timeofday = dt.timedelta(hours=16)
ldt_timestamps = du.getNYSEdays(dt_start, dt_end, dt_timeofday)

c_dataobj = da.DataAccess('Yahoo')
ls_keys = ['open', 'high', 'low', 'close', 'volume', 'actual_close']
ldf_data = c_dataobj.get_data(ldt_timestamps, ls_symbols, ls_keys)
**d_data = dict(zip(ls_keys, ldf_data))**

d_data = dict(zip(ls_keys, ldf_data))是我想要复制的,因为它不会获取我想要的数据,但我需要找到一种方法来将新列附加到我的字典中。下面是我的脚本:

代码语言:javascript
复制
from pandas.io.data import DataReader, DataFrame
import QSTK.qstkutil.qsdateutil as du
import QSTK.qstkutil.DataAccess as da

import datetime as dt

def get_historical_data(symbol, source, date_from, date_to):
    global data_validator
    symbol_data = {}

    ls_keys = ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']

    for key in ls_keys:
        symbol_data[key] = DataFrame({})

    dataframe_open = DataFrame({})

    for item in symbol:
        print 'Fetching data for:', item
        current_data = DataReader(str(item), source, date_from, date_to)
        dataframe_open = {item : current_data['Open']}
        if len(symbol_data['Open'].columns) == 0:
            symbol_data['Open'] = DataFrame(dataframe_open)
        else:
            **#i want to add the new column here but can't seem to do this.**
            #symbol_data['Open'].loc[:item] = DataFrame(dataframe_open)
            pass
    return symbol_data

附注:出于测试目的,我使用以下参数调用函数:

test = get_historical_data(['SPY', 'DIA'], 'yahoo', datetime(2015,1,1), datetime(2015,1,31))

EN

回答 1

Stack Overflow用户

发布于 2015-08-27 23:42:56

下面的方法有帮助吗?还没有测试过,但原则上应该可以工作...只需将数据放入长度相等的数组中,并从中构造数据帧。

代码语言:javascript
复制
def get_historical_data(symbols=[], source=None, date_from=None, date_to=None):
    global data_validator
    symbol_data = {}

    ls_keys = ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
    data = []
    for item in ls_keys:
        data.append(DataReader(str(item), source, date_from, date_to)
    symbol_dataframe=DataFrame(data=data, columns=ls_keys)
    #symbol_dataframe = DataFrame()
    #for key in ls_keys:
    #    symbol_data[key] = DataFrame({})

    #dataframe_open = DataFrame({})

    #for item in symbols:
    '''    print 'Fetching data for:', item
        current_data = DataReader(str(item), source, date_from, date_to)
        dataframe_open = {item : current_data['Open']}
        #print(dataframe_open)
        if len(symbol_data['Open'].columns) == 0:
            symbol_data['Open'] = DataFrame(dataframe_open)
        else:
            #i want to add the new column here but can't seem to do this.**
            symbol_data['Open'] = DataFrame(dataframe_open)
            symbol_data.head()
    '''
    return symbol_dataframe
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32252821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档