【问题标题】:Concatenate different dataframes into one with for loop使用 for 循环将不同的数据帧连接成一个
【发布时间】:2018-03-04 17:13:57
【问题描述】:

我想将不同的财务数据框合并为一个。因此,当手动为 2-3 只股票执行此操作时,我会这样做:

#getting dataframe from .csv file
df1 = pd.read_csv('C:\\Users\\Enric\\Desktop\\python\\tickers\\MSFT.csv',index_col=None, header=0)
df2 = pd.read_csv('C:\\Users\\Enric\\Desktop\\python\\tickers\\MMM.csv',index_col=None, header=0)

#selecting time period
df1_ = df1[(df1['date'] > '2017-01-01') & (df1['date'] <= '2018-01-01')]
df2_= df2[(df2['date'] > '2017-01-01') & (df2['date'] <= '2018-01-01')]

#concatenate
list=[]
list.append(df1_)
list.append(df2_)
df_all=pd.concat(list) #this is the final dataframe (I skipped some column set code)

另一方面,我有一个包含所有公司的每个部门的列表:

healthcare=[u'ABT', u'ABBV', u'AET', u'A', u'ALXN', u'ALGN', u'AGN', u'AMGN', u'ANTM', u'BAX', u'BDX', u'BIIB', u'BSX', u'BMY', u'CELG', u'CNC', u'CI', u'COO', u'CVS', u'DVA', u'XRAY', u'EW', u'EVHC', u'ESRX', u'GILD', u'HCA', u'HOLX', u'HUM', u'IDXX', u'ILMN', u'INCY', u'ISRG', u'JNJ', u'LH', u'LLY', u'MDT', u'MRK', u'MTD', u'MYL', u'PKI', u'PRGO', u'PFE', u'DGX', u'REGN', u'RMD', u'SYK', u'TMO', u'UNH', u'UHS', u'VAR', u'VRTX', u'WAT', u'ZBH', u'ZTS']

并且我想连接来自代码的所有定价数据框出现在此列表中:

for i in healthcare:
  df=pd.read_csv('C:\\Users\\Enric\\Desktop\\python\\tickers\\'+i+'.csv',index_col=None, header=0)
  df1_ = df[(df['date'] > '2017-01-01') & (df['date'] <= '2018-01-01')]
  list=[]
  list.append(df1_)

但这不起作用,因为每个循环我都在列表中复制“df”,所以在尝试使用 pd.concat(list) 时出现错误。

我是 python 新手,这似乎是一个简单的错误,但我不知道怎么做。我很想为循环内的每个公司代码更改 df1_name,但我不知道如何。

谢谢

【问题讨论】:

    标签: python pandas dataframe concatenation financial


    【解决方案1】:

    在循环外定义列表:

    L = []
    for i in healthcare:
      df=pd.read_csv('C:\\Users\\Enric\\Desktop\\python\\tickers\\'+i+'.csv',index_col=None)
      df1_ = df[(df['date'] > '2017-01-01') & (df['date'] <= '2018-01-01')]
      L.append(df1_)
    

    或者使用列表推导:

    p = 'C:\\Users\\Enric\\Desktop\\python\\tickers\\'
    d1 = '2017-01-01'
    d2 = '2018-01-01'
    L = [pd.read_csv(p+i+'.csv',index_col=None).query("@d1 < date <= @d2") for i in healthcare]
    

    df = pd.concat(L)
    

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 2019-06-21
      • 2022-11-17
      • 2023-04-05
      • 2020-08-14
      • 1970-01-01
      • 2021-11-22
      • 2020-12-06
      • 2021-04-22
      相关资源
      最近更新 更多