Python 2.7 创建格式化数据帧,然后逐行添加数据

Python 2.7 创建格式化数据帧,然后逐行添加数据,python-2.7,pandas,Python 2.7,Pandas,我有一个连续的数据流,所以我想先定义DataFrame,这样我就不必告诉pandas格式化数据或设置索引 所以我想创建一个数据帧,比如 df = pd.DataFrame(columns=["timestamp","stockname","price","volume"]) 但是我想告诉熊猫,数据的索引应该是时间戳,格式应该是 "%Y-%m-%d %H:%M:%S:%f" 如果设置了这个参数,那么我将读取文件并将数据传递给初始化的数据帧 我在变量中获取数据,就像每次在循环中填充时一样 for

我有一个连续的数据流,所以我想先定义DataFrame,这样我就不必告诉pandas格式化数据或设置索引

所以我想创建一个数据帧,比如

df = pd.DataFrame(columns=["timestamp","stockname","price","volume"])
但是我想告诉熊猫,数据的索引应该是时间戳,格式应该是

"%Y-%m-%d %H:%M:%S:%f"
如果设置了这个参数,那么我将读取文件并将数据传递给初始化的数据帧

我在变量中获取数据,就像每次在循环中填充时一样

for line in filehandle:

    timestamp, stockname, price, volume = fetch(line)

    here I want to update the "df"
此更新将继续进行,而我将继续使用

df
让我们说成一句话

tempdf
在任何给定时间点执行重新采样或任何其他任务,因为原始数据帧

df
正在不断更新

import numpy as np
import pandas as pd
import datetime as dt
import time

# create df with timestamp as index
df = pd.DataFrame(columns=["timestamp","stockname","price","volume"], dtype = float)
pd.to_datetime(df['timestamp'], format = "%Y-%m-%d %H:%M:%S:%f")
df.set_index('timestamp', inplace = True)

for i in range(10): # for the purposes of functioning demo code
    i += 1 # counter
    time.sleep(0.01) # give jupyter notebook a moment
    timestamp = dt.datetime.now() # to be used as index
    df.loc[timestamp] = ['AAPL', np.random.randint(1000), np.random.randint(10)] # replace with your database read

tempdf = df.copy()

如果连续读取文件或数据库,可以用问题中描述的内容替换for:循环@马特的问题也应该得到解决;如果您需要持续记录或更新数据,我不确定熊猫是否是最佳解决方案。

我在这里扮演魔鬼代言人。你为什么要这样做?如果这是一个主要的快速制作工具,那么首先您是否希望继续附加到熊猫数据帧?第二点几乎与我的第一点相矛盾,熊猫的速度相当快。从机器的角度来看,更改记录的日期格式并不太昂贵。特别是如果它是一条记录,那么随着时间的推移,如何确保数据帧将价格和数量视为浮动而不是对象。如何在初始化期间处理这些问题?pandas通常擅长推断数据类型。如果希望显式,可以使用pd.to_numeric将特定列设置为数字。你能通过编辑答案来显示如何通过使价格和数量浮动来初始化吗?我将把它标记为一个答案,然后我将每列指定为dtype=float。索引在一行之后被更改为datetime,并且当一个字符串(例如“AAPL”)被分配给stockname时,stockname被强制为object。这是行不通的。问题是循环中传递的数据是字符串,有些人不理解它。所以我把它输入到循环中,它开始工作得很好。因此,在初始化过程中也不需要数据类型