【问题标题】:Assign data to separate dataframes, combining and sort by year将数据分配给单独的数据框,按年份组合和排序
【发布时间】:2016-10-24 19:12:12
【问题描述】:

我有40 年的数据,所以我试图将它们中的每一个单独分配给一个数据帧,然后将它们全部存储在一个新的数据帧中,然后对它们进行排序。以下是我目前所拥有的:

import pandas as pd
from pandas import DataFrame

year = 1976
count = 1

for i in range(0,40):

    df[count] = pd.read_excel('42003h'+str(year)+'.xlsx', sheet_name = 'Sheet1')

    count = count + 1
    year = 1976 + 1

我收到了这个错误

错误的项目数通过了 12,位置意味着 1

任何帮助将不胜感激?

【问题讨论】:

    标签: python sorting pandas dataframe concat


    【解决方案1】:

    我认为您可以先创建 Dataframes dfs 的列表,然后将 concat 它添加到一个 dfcount 不是必需的。最后 IIUC sort_values 按列 year

    import pandas as pd
    
    year = 1976
    
    dfs = []
    for i in range(0,40):
        dfs.append(pd.read_excel('42003h'+str(year)+'.xlsx', sheet_name = 'Sheet1'))
        year += 1
    
    #if need concat by columns        
    #df = pd.concat(dfs, axis=1)   
    
    #if need concat by rows
    df = pd.concat(dfs)  
    
    #if need sort by column `year`
    df.sort_values(by='year', inplace=True) 
    

    【讨论】:

    • 这似乎只给了我 1977 年它实际上从 1976 年开始并一直到 2015 年,然后在尾部日期不再存在它的显示数字,如 1609 - 1613,它应该被排序按索引对此感到抱歉
    【解决方案2】:

    我认为你需要初始化你的字典:

    df = {}
    for i in range(0,40):
    
        df[count] = pd.read_excel('42003h'+str(year)+'.xlsx', sheet_name = 'Sheet1')
    

    【讨论】:

      【解决方案3】:

      我会这样做:

      import glob
      import pandas as pd
      
      files = glob.glob('42003h*.xlsx')
      
      # if you want to merge your DFs horizontally then add: `axis=1` parameter
      df = pd.concat([pd.read_excel(f) for f in files], ignore_index=True).sort_values('year')
      
      count = len(files)
      

      【讨论】:

      • 文件似乎是空的,但应该不是因为文件在当前目录中
      • @renardo,试试这个:files = glob.glob('42003h*.xlsx')
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 2021-08-08
      • 2021-10-18
      相关资源
      最近更新 更多