Передача значений столбцов данных фрейма с использованием for loop \ iterate the loop - PullRequest
0 голосов
/ 15 октября 2019

У меня есть фрейм данных, в котором переменная ProblemArea содержит значения («Экран, Модем, LTE, Аудио, видео»). Я использовал цикл for для итерации значений и печати в соответствии с проблемной областью и печати всех записей кадра данных. Я попробовал приведенный ниже код:

import pyodbc
import pandas as pd
import numpy as np
from pandasql import sqldf
crConcat = ''
ProblemArea = ["Screen", "Modem","LTE", "Audio", "video"]
for x in ProblemArea:
    connComp=pyodbc.connect("DSN=sfdc_qct_mirror;autocommit=true")
    #ODS connection string
    server = 'ODSDB'
    db = 'ODS'
    conn = pyodbc.connect()
    SfDf = pd.DataFrame(columns=['casenumber','createddate','RELATED_CRS__C'])
    query_EffQIPL = ("select distinct CASENUMBER, c.CREATEDDATE ,ch.CREATEDDATE as EditDate, c.CLOSEDDATE,PROBLEM_CODE_1__C   where PROBLEM_CODE_1__C = "+ "'"+ x +"'"+  " and OWNER_LOCATION__C = "+ "'Hyderabad'  " )
   EffQIPL_df = pd.read_sql(query_EffQIPL,connComp)
   EffQIPL_df

Я получил вывод только в случае видео "PROBLEMArea", что является последним значением цикла.

CASENUMBER      PROBLEMArea CR_RELATED_TO_THIS_CASE__C
03860369        Video                  No
03867276        Video                  No
04181458        Video                  Yes
03978455        Video                  Yes
04089497        Video                  No

Но я ожидаю, что выходные данные всех ПРОБЛЕМ должны быть напечатаны как:

CASENUMBER      PROBLEMArea CR_RELATED_TO_THIS_CASE__C
03860369        Video                  No
03867276        Video                  No
04181458        Video                  Yes
03978455        Video                  Yes
04089497        Video                  No
CASENUMBER      PROBLEMArea CR_RELATED_TO_THIS_CASE__C
09366546        LTE                    NO
98487348        LTE                    YES
CASENUMBER      PROBLEMArea CR_RELATED_TO_THIS_CASE__C
74627267        Screen                 NO
98273476        Screen                 YES
82373498        Screen                 YES

1 Ответ

0 голосов
/ 15 октября 2019

Это потому, что вы не сохраняете переменную вашего цикла for в список или в dict, поэтому вы каждый раз перезаписываете его,

, попробуйте это: (также немного очищается ваш код, не нужнострока подключения внутри цикла for)

import pyodbc
import pandas as pd
import numpy as np
from pandasql import sqldf
crConcat = ''
ProblemArea = ["Screen", "Modem","LTE", "Audio", "video"]


connComp=pyodbc.connect("DSN=sfdc_qct_mirror;autocommit=true")
ODS connection string
server = 'ODSDB'
db = 'ODS'
conn = pyodbc.connect()
# is this needed?    
# SfDf = pd.DataFrame(columns=['casenumber','createddate','RELATED_CRS__C'])


dfs = []

for x in ProblemArea:

   query_EffQIPL = ("select distinct CASENUMBER, c.CREATEDDATE ,ch.CREATEDDATE as EditDate, c.CLOSEDDATE,PROBLEM_CODE_1__C   where PROBLEM_CODE_1__C = "+ "'"+ x +"'"+  " and OWNER_LOCATION__C = "+ "'Hyderabad'  " )

   dfs.append(pd.read_sql(query_EffQIPL,connComp))

final_ = pd.concat(dfs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...