首先,我导入整个文件并获得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
Run Code Online (Sandbox Code Playgroud)
然后我放弃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
Run Code Online (Sandbox Code Playgroud)
因为我要删除一行,所以我希望内存消耗下降或至少保持不变。
有谁知道为什么会这样吗?或如何解决?还是这是一个错误?
编辑: chicago.csv
发生这种变化的原因是您的索引从更改RangeIndex为Int64Index,从而占用了更多内存。
您可以通过在后面重新设置索引来“修复”此问题dropna(),但这会带来更改行索引的副作用(您可能并不在意)。
这是一个说明性的示例:
首先创建一个示例DataFrame:
df = pd.DataFrame({"a": range(10000)})
df.loc[1000, "a"] = None
Run Code Online (Sandbox Code Playgroud)
打印信息:
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
Run Code Online (Sandbox Code Playgroud)
删除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
Run Code Online (Sandbox Code Playgroud)
重置(并删除)索引:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |