关于python:在循环中存储和添加Pandas DataFrame

Storing & Adding Pandas DataFrame In A Loop

由于我的Generate_Dataframe函数,我有一个循环,每次都会生成随机结果。 因此名称列保持不变,但我的"结果"列始终是不同的浮点值。

1
2
3
def Generate_Dataframe():
 #Do Some Stuff
  return DataFrame

我得到的一个例子就是......

1
2
3
4
5
6
DataFrame
Name 1       Name 2        Result
Joe          Smith           5.5
Jake         Smith           4.5
Jim          Smith           2.5
Joanne       Smith           1.5

因此,当我运行我的循环时,我正在生成如上所述的数据帧,我希望每次都能够更新/添加Result列。

1
2
for x in range(1,5):
    New_DataFrame = Generate_DataFrame()

我一直无法找到存储数据帧的方法。 优化速度会很棒。 提前致谢!


IIUC你正在使用像索引这样的name列。 你应该把它们放在那里然后更新/添加变得微不足道。

1
2
3
4
5
6
7
8
9
10
11
def gen_df():
    midx = pd.MultiIndex.from_tuples([
        ('Joe', 'Smith'),
        ('Jake', 'Smith'),
        ('Jim', 'Smith'),
        ('Joanne', 'Smith')
    ], names=['Name 1', 'Name 2'])
    return pd.DataFrame(
        dict(Result=np.random.rand(4)),
        midx
    )

选项1
你不必这样做。 但这就是我这样做的方式:

1
2
3
4
5
6
7
8
9
10
from functools import reduce

reduce(pd.DataFrame.add, (gen_df() for _ in range(1, 5)))

                 Result
Name 1 Name 2          
Joe    Smith   2.400550
Jake   Smith   2.222812
Jim    Smith   2.601639
Joanne Smith   0.503774

选项2
在循环中

1
2
3
4
5
6
7
8
9
10
11
12
13
df = gen_df()

for _ in range(1, 5):
    df += gen_df()

df

                 Result
Name 1 Name 2          
Joe    Smith   1.998055
Jake   Smith   2.268697
Jim    Smith   2.815204
Joanne Smith   2.253301

如果你想存储数据帧我认为最好的方法是保存到pickle / csv文件。
df.to_pickle(FILE_NAME)/df.to_csv(FILE_NAME)

您可以阅读:如何使用Pandas存储数据框