使用另一DataFrame列创建新DataFrame时出现内存错误
看起来你在尝试从现有DataFrame df 中提取Time和Calling Minutes两列创建新的DataFrame时遇到了问题。先把你的报错信息完整整理如下:
Traceback (most recent call last):
File "C:\Official Works\Data Health Check\Scripts\3G\3G Final KPI with P.py", line 11, in
df1=df[['Time','Calling Minutes']]
File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 2133, in getitem
return self._getitem_array(key)
File "C:\Python35\lib\site-packages\pandas\core\frame.py", ...
这种报错大概率是列名不匹配或目标列不存在导致的,下面是几种实用的排查和解决方法:
1. 确认列名的准确性
pandas对列名的拼写、大小写和空格极度敏感,哪怕一个空格或者大小写差异都会触发索引失败。你可以先打印出df的所有列名,确认目标列是否存在:
# 打印所有列名的列表 print(df.columns.tolist())
如果发现列名和你写的不一致(比如Calling Minutes实际是Calling_Minutes,或者Time是小写的time),直接修改代码中的列名即可。
2. 快速检查目标列是否存在
如果不确定具体哪些列存在,可以用简单的成员判断验证:
# 分别检查两个列是否在df的列集合中 print("Time是否存在:", 'Time' in df.columns) print("Calling Minutes是否存在:", 'Calling Minutes' in df.columns)
如果某一列返回False,说明该列不在原DataFrame中,你需要检查数据加载的代码,确认是否遗漏了该列,或者数据来源本身就没有这列数据。
3. 处理列名的隐藏空格或特殊字符
有时候列名可能包含隐藏的前后空格,或者加载数据时引入了特殊字符,导致看起来名字正确但实际不匹配。你可以先清理列名:
# 去除所有列名前后的空格 df.columns = df.columns.str.strip() # 再尝试提取列 df1 = df[['Time','Calling Minutes']]
4. 确认df是标准的pandas DataFrame
如果df不是DataFrame(比如是Series或者其他数据结构),也会导致这种索引方式失效。先检查df的类型:
print(type(df))
如果输出不是<class 'pandas.core.frame.DataFrame'>,需要先将其转换为DataFrame,比如:
# 如果是Series,转换为DataFrame df = df.to_frame()
按照上面的步骤排查,应该能快速定位并解决你的问题。
内容的提问来源于stack exchange,提问作者Suman

