Pandas Применение Lambda вызывает TypeError: объект int не может быть подписан - PullRequest
0 голосов
/ 18 июня 2020

У меня есть этот фрейм данных, его образец здесь:

Blockquote

У меня проблемы с этим кодом. Я получаю следующее сообщение об ошибке:

Traceback (most recent call last):   File "C:/Users/....py", line 12, in <module>
 dfF['CCRYear'] = dfF['Year'].apply(lambda x: 'True' if x['Year'] == x['MaxSS Year'] else 'False')   File "C:\Users\....py", line 3848, in apply
 mapped = lib.map_infer(values, f, convert=convert_dtype)   File "pandas\_libs\lib.pyx", line 2329, in pandas._libs.lib.map_infer   
 File "C:/Users/....py", line 12, in <lambda>
 dfF['CCRYear'] = dfF['Year'].apply(lambda x: 'True' if x['Year'] == x['MaxSS Year'] else 'False')
 TypeError: 'int' object is not subscriptable

Столбцы «Год» и «Год MaxSS» являются типами данных int64. Вот мой код ниже:

import pandas as pd
import numpy as np

def cached_date_parser(s):
    if s in cache:
        return cache[s]
    dt = pd.to_datetime(s, format='%Y%m%d', coerce=True)
    cache[s] = dt
    return dt

dfF = pd.read_csv(r'C:\\Users\\....C_14.csv', parse_dates = [1], header='infer')
dfF['CCRYear'] = dfF['Year'].apply(lambda x: 'True' if x['Year'] == x['MaxSS Year'] else 'False')

1 Ответ

1 голос
/ 18 июня 2020

Проблема с вашим кодом заключается в том, что вы используете apply() в отдельных столбцах и индексируете это.

Посмотрите, что вы делаете, просто напечатайте x в своем lambda

df['Year'].apply(lambda x: print(x))

Он будет выводиться ниже

2017
2018
2018
2015
2015
2015

Ваш код пытается проиндексировать целочисленное значение x['Year']. Здесь x - это целое число, например 2018, 2019 и c.

Измените это на

dfF['CCRYear'] = dfF['Year'].apply(lambda x: 'True' if x['Year'] == x['MaxSS Year'] else 'False')

this

dfF['CCRYear'] = dfF['Year'] == dfF['MaxSS Year']

Используя np.where ()

dfF['CCRYear'] = np.where(dfF['Year'] == dfF['MaxSS Year'], 'True', 'False')
...