Аргумент типа «Объект» не может быть назначен параметру типа «строка»

Ниже приведен метод слияния словаря фреймов данных, при котором имена столбцов синхронизируются со словарем. Кроме того, при необходимости он заполняет отсутствующие значения:

Это функция слияния данных фреймов данных

def MergeDfDict(dfDict, onCols, how='outer', naFill=None):
  keys = dfDict.keys()
  for i in range(len(keys)):
    key = keys[i]
    df0 = dfDict[key]
    cols = list(df0.columns)
    valueCols = list(filter(lambda x: x not in (onCols), cols))
    df0 = df0[onCols + valueCols]
    df0.columns = onCols + [(s + '_' + key) for s in valueCols] 

    if (i == 0):
      outDf = df0
    else:
      outDf = pd.merge(outDf, df0, how=how, on=onCols)   

  if (naFill != None):
    outDf = outDf.fillna(naFill)

  return(outDf)

OK, позволяет генерировать данные и проверять это:

def GenDf(size):
  df = pd.DataFrame({'categ1':np.random.choice(a=['a', 'b', 'c', 'd', 'e'], size=size, replace=True),
                      'categ2':np.random.choice(a=['A', 'B'], size=size, replace=True), 
                      'col1':np.random.uniform(low=0.0, high=100.0, size=size), 
                      'col2':np.random.uniform(low=0.0, high=100.0, size=size)
                      })
  df = df.sort_values(['categ2', 'categ1', 'col1', 'col2'])
  return(df)


size = 5
dfDict = {'US':GenDf(size), 'IN':GenDf(size), 'GER':GenDf(size)}   
MergeDfDict(dfDict=dfDict, onCols=['categ1', 'categ2'], how='outer', naFill=0)
0
задан veben 16 January 2019 в 18:31
поделиться

2 ответа

Как говорят ошибки, вы назначаете Object для string.

Попробуйте заменить свой код следующим образом:

public login(userData: any): Observable<string> {
    return this.http
      .post("/api/users/login", userData)
      .map((token: string) => this.saveToken(token));
}


private saveToken(token: string): string {
    localStorage.setItem("car_auth", token);
    return token;
}
0
ответ дан veben 16 January 2019 в 18:31
поделиться

Transcompiler нужен намек на то, что возвращает ваш http.post, потому что вы ввели аргумент из saveToken. Transcompiler хочет убедиться, что вы передаете строку.

добавить явный тип:

public login(userData: any) {
  return this.http
    .post("/api/users/login", userData)
    .map((token: string) => this.saveToken(token));
}
0
ответ дан Florian 16 January 2019 в 18:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: