循环函数并将数据帧绑定在一起

2024-03-28 22:10:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个连接到SQL数据库并从表中获取数据的函数。我的目标是在迭代器上循环该函数,以便在不同的表上进行相同的查询。该函数可以工作,但下面的for循环不返回任何内容。我是Python新手,我肯定我错过了一些基本的东西

示例代码-

def func(years):
  
    conn = pyodc.connect()
      sql_query = """ SELECT TOP 100 X
                      FROM table_""" + years
      df = pd.Dataframe()
      if len(df) == 0:
         df = pd.read_sql(sql_query, conn)
         df['year'] = years
      else:
         df_temp = df.copy()
         temp = pd.read_sql_query)sql_query, conn)
         temp['year'] = years
         df = temp.append(df_temp)
    
      return df

loop = ['2017', '2018']

for year in loop:
    func(year)

2条回答

需要将year作为参数传递给func函数,如下所示-

def func(year):
      conn = pyodc.connect()
      sql_query = """ SELECT TOP 100 X
                      FROM table_{}""".format(years)
      df = pd.Dataframe()
      if len(df) == 0:
         df = pd.read_sql(sql_query, conn)
         df['year'] = years
      else:
         df_temp = df.copy()
         temp = pd.read_sql_query(sql_query, conn)
         temp['year'] = years
         df = temp.append(df_temp)

      return df

loop = ['2017', '2018']

for year in loop:
    func(year)

有关向函数传递参数的详细信息,请参阅here

您的代码也有一些其他逻辑错误-

  1. 您正在if条件之前创建一个空数据帧。它总是将if条件设置为True
  2. 您没有将函数的返回值赋给任何变量
  3. 在某些地方,您可能需要使用df_temp而不是df
  4. 您没有将df作为函数参数传递(如果您希望在函数中修改它)。为此,还需要在for循环之前创建一个空数据帧

您需要向函数传递一个参数,使其接受并循环。此外,您可能需要考虑^ {CD1}},这样您就可以为您的数据文件分配变量。p>

因此,类似这样的东西会起作用,而且更干净:

def select_top(year):
    conn = pyodc.connect()
    sql_query = "SELECT TOP 100 X FROM table_{}".format(year)

    df = pd.read_sql(sql_query, conn)
    df['year'] = years

    return df

years = ['2017', '2018']

data = pd.concat([select_top(year) for year in years])

它将在数年内循环并将所有数据帧连接成1

相关问题 更多 >