python - Pandas Apply Lambda 导致 TypeError: 'int' object is not subscriptable
问题描述
我有这个数据框的一个样本在这里:
我在处理这段代码时遇到了问题。我收到以下错误消息:
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
'Year' 和 'MaxSS Year' 列都是 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')
解决方案
您的代码的问题是您apply()
在单个列上使用并且您正在为其编制索引。
看看你在做什么,只需x
在你的lambda
df['Year'].apply(lambda x: print(x))
它会在下面输出
2017
2018
2018
2015
2015
2015
您的代码正在尝试索引整数值x['Year']
。这x
是整数年,如 2018 年、2019 年等。
将此更改为
dfF['CCRYear'] = dfF['Year'].apply(lambda x: 'True' if x['Year'] == x['MaxSS Year'] else 'False')
这个
dfF['CCRYear'] = dfF['Year'] == dfF['MaxSS Year']
dfF['CCRYear'] = np.where(dfF['Year'] == dfF['MaxSS Year'], 'True', 'False')
推荐阅读
- c# - abp.io 带有角度 UI,多租户数据库配置问题
- python - 如何对连接到 AWS 机密管理器和 RDS (mySQL) 的用 python 编写的 lambda 函数进行单元测试
- alert - 使用 Snort 从 pcap 文件生成警报
- html - 如何将活动类添加到 li 元素内的锚标记并更改当前元素外观?
- performance - 以良好的性能迭代状态 Monad 并按顺序收集结果
- python - 将可选数量的参数传递给标志 Python argparse
- r - 为什么 formattable 会忽略我的条件格式?
- python - 为什么我的 django 应用程序无法部署到 heroku(“psycopg2 的构建轮”)?
- python - 估计全局最大值附近的 3-D 网格中的不确定性
- java - 为什么 `ArrayList.add` 会导致 ConcurrentModificationException?