python - Pandas 数据框 CSV 减少磁盘大小

标签 python pandas csv dataframe compression

对于我的大学作业,我必须生成一个包含世界机场所有距离的 csv 文件...问题是我的 csv 文件重 151Mb。我想尽可能地减少它:这是我的 csv:

enter image description here

这是我的代码:

# drop all features we don't need
for attribute in df:
    if attribute not in ('NAME', 'COUNTRY', 'IATA', 'LAT', 'LNG'):
        df = df.drop(attribute, axis=1)

# create a dictionary of airports, each airport has the following structure:
# IATA : (NAME, COUNTRY, LAT, LNG)
airport_dict = {}
for airport in df.itertuples():
    airport_dict[airport[3]] = (airport[1], airport[2], airport[4], airport[5])

# From tutorial 4 soulution:
airportcodes=list(airport_dict)
airportdists=pd.DataFrame()
for i, airport_code1 in enumerate(airportcodes):
    airport1 = airport_dict[airport_code1]
    dists=[]
    for j, airport_code2 in enumerate(airportcodes):
        if j > i:
            airport2 = airport_dict[airport_code2]
            dists.append(distanceBetweenAirports(airport1[2],airport1[3],airport2[2],airport2[3]))
        else:
        # little edit: no need to calculate the distance twice, all duplicates are set to 0 distance
            dists.append(0)
    airportdists[i]=dists
airportdists.columns=airportcodes
airportdists.index=airportcodes

# set all 0 distance values to NaN
airportdists = airportdists.replace(0, np.nan)
airportdists.to_csv(r'../Project Data Files-20190322/distances.csv')

我也试过在保存之前重新索引它:

# remove all NaN values
airportdists = airportdists.stack().reset_index()
airportdists.columns = ['airport1','airport2','distance']

但结果是一个包含 3 列和 1700 万列以及磁盘大小为 419Mb 的数据框...完全不是改进...

你能帮我缩小 csv 的大小吗?谢谢!

最佳答案

我以前做过类似的申请;这是我要做的:

很难缩小你的文件,但如果你的应用程序需要有机场与其他人之间的距离,我建议你创建 9541 个文件,每个文件将是机场与其他人的距离及其名称将是机场的名称。

在这种情况下,文件的加载非常快。

关于python - Pandas 数据框 CSV 减少磁盘大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55299536/

相关文章:

返回索引的元组/列表列表中的 Python 最快搜索

python - 如何在 Python 3 中将两个函数加在一起?

python - PIP 安装 Numpy 抛出错误 "ascii codec can' t decode byte 0xe2"

Python:将数据写入特定单元格

python - 如何在Django项目中使用elasticsearch?

python - 如何使用 OpenCV 平滑并变薄这些非常粗糙的图像?

python - 如何使用python从HTML文件中读取数据并将数据写入CSV文件?

python - Pandas 合并给出错误 "Buffer has wrong number of dimensions (expected 1, got 2)"

Python替换csv文件中的字符串

java - Apache Spark 数据集 API - 不接受架构 StructType