创建一个空的Pandas DataFrame,然后填充它?
我从这里的熊猫数据框文档开始:http://pandas.pydata.org/pandas-docs/stable/dsintro.html
我想用时间序列类型的计算迭代地填充数据框。 所以基本上,我想初始化数据框,列A,B和时间戳记行,全部为0或全部NaN。
然后,我会添加初始值,然后查看这个数据计算行之前的新行,比如行[A] [t] =行[A] [t-1] +1左右。
我目前使用的代码如下,但我觉得它有点难看,并且必须有一种方法可以直接或通过一种更好的方式直接使用数据框。 注意:我正在使用Python 2.7。
import datetime as dt
import pandas as pd
import scipy as s
if __name__ == '__main__':
base = dt.datetime.today().date()
dates = [ base - dt.timedelta(days=x) for x in range(0,10) ]
dates.sort()
valdict = {}
symbols = ['A','B', 'C']
for symb in symbols:
valdict[symb] = pd.Series( s.zeros( len(dates)), dates )
for thedate in dates:
if thedate > dates[0]:
for symb in valdict:
valdict[symb][thedate] = 1+valdict[symb][thedate - dt.timedelta(days=1)]
print valdict
以下是几点建议:
使用date_range
作为索引:
import datetime
import pandas as pd
import numpy as np
todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(10), periods=10, freq='D')
columns = ['A','B', 'C']
注意:我们可以简单地通过编写创建一个空的DataFrame(使用NaN
):
df_ = pd.DataFrame(index=index, columns=columns)
df_ = df_.fillna(0) # with 0s rather than NaNs
要为数据执行这些类型的计算,请使用numpy数组:
data = np.array([np.arange(10)]*3).T
因此我们可以创建DataFrame:
In [10]: df = pd.DataFrame(data, index=index, columns=columns)
In [11]: df
Out[11]:
A B C
2012-11-29 0 0 0
2012-11-30 1 1 1
2012-12-01 2 2 2
2012-12-02 3 3 3
2012-12-03 4 4 4
2012-12-04 5 5 5
2012-12-05 6 6 6
2012-12-06 7 7 7
2012-12-07 8 8 8
2012-12-08 9 9 9
如果您只是想创建一个空的数据框并在稍后填入一些传入数据框,请尝试以下操作:
在这个例子中,我使用这个熊猫文档创建一个新的数据框,然后使用append使用oldDF中的数据写入newDF。
看看这个
newDF = pd.DataFrame() #creates a new dataframe that's empty
newDF = newDF.append(oldDF, ignore_index = True) # ignoring index is optional
# try printing some data from newDF
print newDF.head() #again optional
如果您希望从头开始使用列名,请使用以下方法:将pandas导入为pd
col_names = ['A', 'B', 'C']
my_df = pd.DataFrame(columns = col_names)
my_df
如果你想在数据框中添加一条记录,最好使用它
my_df.loc[len(my_df)] = [2, 4, 5]
但是,如果您想向my_df添加另一个数据框,请执行以下操作:
col_names = ['A', 'B', 'C']
my_df2 = pd.DataFrame(columns = col_names)
my_df = my_df.append(my_df2)
如果您在循环中添加行,请考虑性能问题; 对于大约前1000条记录,“my_df.loc”性能会更好,并且通过增加循环中的记录数量逐渐变慢。
如果你打算在一个大循环内做一些事情(比如10M记录),你最好使用这两种混合物; 用iloc填充一个数据帧,直到大小达到1000左右,然后将其附加到原始数据帧,然后使用临时数据帧。 这会提高你的表现10倍左右
链接地址: http://www.djcxy.com/p/70921.html