【问题标题】:Append to dataframe with for loop. Python3使用 for 循环附加到数据帧。 Python3
【发布时间】:2017-09-29 02:34:33
【问题描述】:

我正在尝试遍历列表(y)并通过将每个项目的一行附加到数据框来输出。

y=[datetime.datetime(2017, 3, 29), datetime.datetime(2017, 3, 30), datetime.datetime(2017, 3, 31)]

期望的输出:

Index                 Mean            Last
2017-03-29        1.5               .76
2017-03-30        2.3               .4
2017-03-31        1.2                1 

这是我目前拥有的代码的第一部分和最后一部分:

import pandas as pd
import datetime

df5=pd.DataFrame(columns=['Mean','Last'],index=index)

for item0 in y:
.........
.........
    df=df.rename(columns = {0:'Mean'})
    df4=pd.concat([df, df3], axis=1)
    print (df4)
    df5.append(df4)
    print (df5)

我的代码只将一行放入数据框中,而不是 y 中的每个项目一行:

Index                Mean             Last
2017-03-29         1.5                .76

【问题讨论】:

    标签: python-3.x pandas datetime for-loop dataframe


    【解决方案1】:

    试试:

    y = [datetime(2017, 3, 29), datetime(2017, 3, 30),datetime(2017, 3, 31)]
    m = [1.5,2.3,1.2]
    l = [0.76, .4, 1]
    
    df = pd.DataFrame([],columns=['time','mean','last'])
    for y0, m0, l0 in zip(y,m,l):
        data = {'time':y0,'mean':m0,'last':l0}
        df = df.append(data, ignore_index=True)
    

    如果你想让y 成为index

    df.index = df.time
    

    【讨论】:

      【解决方案2】:

      有几种方法可以解决此问题,但在提供的信息有限的情况下,很难知道哪种方法最有意义。但一种方法是从只有索引的数据帧开始,逐行遍历数据帧并填充来自其他进程的值。这是该方法的一个示例:

      import datetime
      import numpy as np
      import pandas as pd
      
      y=[datetime.datetime(2017, 3, 29), datetime.datetime(2017, 3, 30), datetime.datetime(2017, 3, 31)]
      main_df = pd.DataFrame(y, columns=['Index']) 
      
      #pop in the additional columns you want, but leave them blank
      main_df['Mean'] = None
      main_df['Last'] = None
      
      #set the index
      main_df.set_index(['Index'], inplace=True)
      

      这给了我们以下信息:

                  Mean  Last
      Index                 
      2017-03-29  None  None
      2017-03-30  None  None
      2017-03-31  None  None
      

      现在让我们循环并插入一些组成的随机值:

      ## loop through main_df and add values
      for (index, row) in main_df.iterrows():
          main_df.ix[index].Mean = np.random.rand()
          main_df.ix[index].Last = np.random.rand()
      

      这会产生以下数据框,其中填充了 None 值:

                      Mean      Last
      Index                         
      2017-03-29  0.174714  0.718738
      2017-03-30  0.983188  0.648549
      2017-03-31   0.07809   0.47031
      

      【讨论】:

      • 我应该提到我的 for 循环在一天内获得了特定的平均/去年值。所以我需要for循环来输出每一天的平均值/最后值并将其放入main_df中。通过首先将 df4 的每一列附加到列表中,我能够使用 qbzenker 的方式。你的方式会假设我已经在 df 中拥有 y(i) 的所有输出,这就是我想要得到的。那么还有其他简单的方法可以做到这一点吗?
      • 您应该提供一些示例数据,说明您知道什么以及它的结构。
      猜你喜欢
      • 2017-05-19
      • 1970-01-01
      • 2016-01-31
      • 2015-04-05
      • 2016-12-19
      • 2016-10-13
      • 2019-04-12
      • 2017-10-21
      • 1970-01-01
      相关资源
      最近更新 更多