python - .dropna() 增加内存使用
问题描述
首先我导入整个文件并获得 1002.0+ KB 的内存消耗
df = pd.read_csv(
filepath_or_buffer="./dataset/chicago.csv"
)
print(df.info())
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 32063 entries, 0 to 32062
# Data columns (total 4 columns):
# Name 32062 non-null object
# Position Title 32062 non-null object
# Department 32062 non-null object
# Employee Annual Salary 32062 non-null object
# dtypes: object(4)
# memory usage: 1002.0+ KB
# None
然后我删除 NaN,再次运行脚本并获得 1.2+ MB 的内存消耗
df = pd.read_csv(
filepath_or_buffer="./dataset/chicago.csv"
).dropna(how="all")
# <class 'pandas.core.frame.DataFrame'>
# Int64Index: 32062 entries, 0 to 32061
# Data columns (total 4 columns):
# Name 32062 non-null object
# Position Title 32062 non-null object
# Department 32062 non-null object
# Employee Annual Salary 32062 non-null object
# dtypes: object(4)
# memory usage: 1.2+ MB
# None
因为我要删除一行,所以我预计内存消耗会下降或至少保持不变。
有谁知道为什么会这样?或如何解决?或者如果这是一个错误?
编辑: 芝加哥.csv
解决方案
更改来自您的索引从 a 更改RangeIndex
为 an的事实Int64Index
,这需要更多内存。
您可以通过在 之后重置索引来“修复”此问题dropna()
,但这会产生更改行索引的副作用(您可能不关心)。
这是一个说明性示例:
首先创建一个示例 DataFrame:
df = pd.DataFrame({"a": range(10000)})
df.loc[1000, "a"] = None
打印信息:
print(df.info())
#<class 'pandas.core.frame.DataFrame'>
#RangeIndex: 10000 entries, 0 to 9999
#Data columns (total 1 columns):
#a 9999 non-null float64
#dtypes: float64(1)
#memory usage: 78.2 KB
删除 na 值:
print(df.dropna().info())
#<class 'pandas.core.frame.DataFrame'>
#Int64Index: 9999 entries, 0 to 9999
#Data columns (total 1 columns):
#a 9999 non-null float64
#dtypes: float64(1)
#memory usage: 156.2 KB
重置(并删除)索引:
df.dropna().reset_index(drop=True).info()
#<class 'pandas.core.frame.DataFrame'>
#RangeIndex: 9999 entries, 0 to 9998
#Data columns (total 1 columns):
#a 9999 non-null float64
#dtypes: float64(1)
#memory usage: 78.2 KB
推荐阅读
- reactjs - 重新加载树视图时,使用 nodeId 扩展到材质 ui TreeView 中的所需节点
- python - 未找到页面 (404) 未找到与查询匹配的评论
- android - 添加垂直线以显示进度目标
- html - Bootstrap下拉css和下拉框内的输入字段只能输入数字
- android - 使用agora进行实时视频通话中的实时视频和其他功能所需的水印
- python - 逻辑回归(从头开始)预测所有内容均为 0.5
- android - 在 Android Studio 中未检测到 Numpad_ENTER
- android - 是否可以在按下单个视图时执行两个动作侦听器?
- android - Android espresso 无法导航到其他 Fragment?
- c++ - 如何在 C++ 中将矩阵与文件结合起来?