【问题标题】:Append dataframe附加数据框
【发布时间】:2022-01-15 23:45:13
【问题描述】:

我正在尝试从 Tiingo 获取股票价格并附加数据框

    data = pd.DataFrame()   

    lis=[ 
"AAPL",
"MSFT",
"AMZN",
"GOOGL",
"TSLA",
"GOOG",
"NVDA",
"FB",
"JPM",
"BAC",
"ADBE",
"MA",
"PFE",
"DIS",
"NFLX",
"INTC",
"VZ",
"MO"
]

for i in lis:
      data =data.append(client.get_dataframe([i],
                                      frequency='weekly',
                                      metric_name='close',
                                      startDate='2020-03-01',
                                      endDate='2021-12-10'))   

但是,结果显示有点不同:

             AAPL  MFST
2020-03-01   100   NAN
2020-03-02   101   NAN
2020-03-03   103   NAN
...                NAN
2021-12-10   120   NAN

2020-03-01   NAN   600
2020-03-02   NAN   400
2020-03-03   NAN   300
...          NAN   
2021-12-10   NAN   1100

我怎样才能让它看起来像这样:

             AAPL  MFST
2020-03-01   100   600
2020-03-02   101   400
2020-03-03   103   300
...                
2021-12-10   120   1100

【问题讨论】:

    标签: python dataframe append


    【解决方案1】:

    假设您无法更改生成初始输入的方法,您可以使用groupby 修复它:

    data = data.groupby(level=0).max()
    

    【讨论】:

      【解决方案2】:

      您可以尝试使用 pandas concatenate 方法,而不是使用 pandas DataFrame.append 方法。

      import pandas as pd
      dfs = []
      for i in lis:
            dfs.append(client.get_dataframe([i],
                                            frequency='weekly',
                                            metric_name='close',
                                            startDate='2020-03-01',
                                            endDate='2021-12-10'))
      data = pd.concat(dfs, axis=1) # set axis = 1 to concate by columns, not rows! 
      

      请注意,这假设您的 dfs 列表具有 a) 一个公共索引和 b) 除了 AAPLMSFT 之外没有额外的列。

      如果需要,您也可以尝试合并:

      from functools import reduce
      data = reduce(lambda df1,df2: pd.merge(df1,df2,on='id'), dfs)
      

      id 将是您从客户端提取的所有 dfs 共有的列。你可能不需要这个,因为你有匹配的索引并且想要连接列。

      【讨论】:

        【解决方案3】:

        append 方法追加新行。这正是您所看到的结果。你需要加入而不是追加。

        试试这个:

        new_data = client.get_dataframe([i],
                                              frequency='weekly',
                                              metric_name='close',
                                              startDate='2020-03-01',
                                              endDate='2021-12-10')
        data.join(new_data)
        

        df.join() 方法的文档可在此处获得:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.join.html

        【讨论】:

          猜你喜欢
          • 2021-06-06
          • 1970-01-01
          • 2018-10-13
          • 2019-03-22
          • 1970-01-01
          • 1970-01-01
          • 2021-12-20
          • 2020-03-08
          • 2019-07-09
          相关资源
          最近更新 更多