python - Pandas 数据帧 CSV 减少磁盘大小
问题描述
对于我的大学作业,我必须生成一个包含世界机场所有距离的 csv 文件……问题是我的 csv 文件重 151Mb。我想尽可能地减少它:这是我的 csv:
这是我的代码:
# 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 文件,每个文件将是机场与其他人的距离,其名称将是名称的机场。
在这种情况下,文件的加载速度非常快。
推荐阅读
- html - CSS 滚动捕捉不适用于 CSS Grid
- python - tensorflow boolean_mask 如何在两个张量之间进行掩码?
- scala - 如何使用 Spark(使用 scala)有效地读取 Kafka 主题中的每条消息?
- animation - 将小部件添加到小部件树时如何为更改设置动画
- node.js - 使用 Node JS 在 Telegram Bot 上存储用户发送的文件
- android - 找不到“androidx.arch”、“androidx.room”等版本
- react-native - 在 React 中使用时调用本地资源
- angular - routerLink 未链接(类似于 href)
- javascript - How to display an array of messages being received from database, for a chat-room
- python-3.x - 将字典复制到多个进程是否也会复制字典中的对象?