为了账号安全,请及时绑定邮箱和手机立即绑定

内存错误:发生在 Linux 而不是 Mac OS

内存错误:发生在 Linux 而不是 Mac OS

MM们 2021-08-14 15:54:47
我有一个从 csv 读取的大熊猫数据框(7 GiB)。我需要将此数据框与另一个小得多的数据框合并。假设它的大小可以忽略不计。我知道 Pandas 中的合并操作将保留 2 个要合并的数据帧 + 合并的数据帧。由于我只有 16 GiB 的 RAM,当我在 Linux 上运行合并时,它会因内存错误而失败(我的系统消耗了大约 3-4 GiB)。我还尝试在 Mac 上运行合并,也有 16 GiB。默认情况下,系统消耗大约 3 GiB 的 RAM。合并在 Mac 上完成,内存不超过 10 GiB。这怎么可能?pandas 的版本是一样的,dataframe 是一样的。这里发生了什么?编辑:这是我用来读取/合并文件的代码:# Read the data for the stations, stored in a separate filestations = pd.read_csv("stations_with_id.csv", index_col=0)stations.set_index("id_station")list_data = list()data = pd.DataFrame()# Merge all pollutants data in one dataframe# Probably not the most optimized approach ever...for pollutant in POLLUTANTS:    path_merged_data_per_pollutant = os.path.join("raw_data", f"{pollutant}_merged")    print(f"Pollutant: {pollutant}")    for f in os.listdir(path_merged_data_per_pollutant):        if ".csv" not in f:            print(f"passing {f}")            continue        print(f"loading {f}")        df = pd.read_csv(            os.path.join(path_merged_data_per_pollutant, f),            sep=";",            na_values="mq",            dtype={"concentration": "float64"},        )        # Drop useless colums and translate useful ones to english        # Do that here to limit memory usage        df = df.rename(index=str, columns=col_to_rename)        df = df[list(col_to_rename.values())]        # Date formatted as YYYY-MM        df["date"] = df["date"].str[:7]        df.set_index("id_station")        df = pd.merge(df, stations, left_on="id_station", right_on="id_station")        # Filter entries to France only (only the metropolitan area) based on GPS coordinates        df = df[(df.longitude > -5) & (df.longitude < 12)]        list_data.append(df)    print("\n")data = pd.concat(list_data)唯一不是字符串的列是concentration,我在读取 csv 时指定了类型。站点数据帧 < 1 MiB。
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

MacOS 从 Mavericks 开始压缩内存。如果您的数据帧实际上不是随机的,则它不会占用 RAM 中的全部 7GiB。

也有一些方法可以在 Linux 上获得压缩内存,但这不一定启用。这取决于您的发行版和配置。


查看完整回答
反对 回复 2021-08-14
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号