我从panda DataFrame文档开始:数据结构简介

我希望在时间序列类型的计算中用值迭代地填充DataFrame。所以基本上,我想用列A、B和时间戳行初始化DataFrame,全部为0或全部为NaN。

然后,我将添加初始值,并遍历该数据,从前面的行计算新行,例如,行[A][t]=行[A][t-1]+1左右。

我目前使用的代码如下所示,但我觉得这有点难看,必须有一种直接使用DataFrame的方法,或者只是一种更好的方法。

注意:我使用的是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

当前回答

# import pandas library
import pandas as pd

# create a dataframe
my_df = pd.DataFrame({"A": ["shirt"], "B": [1200]})

# show the dataframe
print(my_df)

其他回答

用列名初始化空框架

import pandas as 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_dic = {'A':2, 'B':4, 'C':5}
my_df.loc[len(my_df)] = my_dic 

将另一帧附加到现有帧

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倍。

这是我用循环从几个列表中创建动态数据帧的方法

x = [1,2,3,4,5,6,7,8]
y = [22,12,34,22,65,24,12,11]
z = ['as','ss','wa', 'ss','er','fd','ga','mf']
names = ['Bob', 'Liz', 'chop']

一个循环

def dataF(x,y,z,names):
    res = []

    for t in zip(x,y,z):
        res.append(t)

    return pd.DataFrame(res,columns=names)

后果

dataF(x,y,z,names)

# import pandas library
import pandas as pd

# create a dataframe
my_df = pd.DataFrame({"A": ["shirt"], "B": [1200]})

# show the dataframe
print(my_df)

简单地说:

import numpy as np
import pandas as pd

df=pd.DataFrame(np.zeros([rows,columns])

然后加满。

假设一个数据帧有19行

index=range(0,19)
index

columns=['A']
test = pd.DataFrame(index=index, columns=columns)

保持A列为常量

test['A']=10

将b列保持为循环给定的变量

for x in range(0,19):
    test.loc[[x], 'b'] = pd.Series([x], index = [x])

可以用任何值替换pd.Series中的第一个x([x],index=[x])