1

我正在对每个文件大约6GB的大文件执行计算,并遇到了我听说与 pandas 相比优化的Modin pandas。

我需要分块读取 CSV 文件并对其执行计算并将其附加到大数据帧并再次将大数据帧转换为CSV文件。

这与Pandas完全兼容。但是即使是小文件也需要花费太多时间。我什至无法想象6GB的文件。

但是,当我尝试对 modin pandas 做同样的事情时,它无法将数据框附加到我想要转换为 csv 文件的大数据框。

任何人都可以提出任何替代方案或解决方案。

Python - 3.6
Pandas - 0.24.2
Modin Pandas - 0.5.2

代码。

import modin.pandas as pd

def calculate_visit_prioritization(df):
    # calculations here
    return df

def get_all_data():
    big_df = pd.DataFrame()
    for df in pd.read_csv('./samp.csv', chunksize=50):
        big_df = big_df.append(calculate_visit_prioritization(df))
    big_df.to_csv('samps3.csv', index=False)

def main():
    get_all_data()

if __name__ == '__main__':
    main()

使用 Modin pandas 附加数据帧时出错。

UserWarning:DataFrame.append对于默认为 pandas 实现的空 DataFrame。

文件“/home/tony/.local/lib/python3.6/site-packages/pandas/core/reshape/concat.py”,第 289 行,在__init__raise TypeError(msg)

TypeError:无法连接类型为“”的对象;只有 pd.Series、pd.DataFrame 和 pd.Panel(已弃用)obj 有效

我已经浏览了这个链接,据说熊猫的.append()功能部分( P )在 Modin 中实现。

4

1 回答 1

2

Modin 的 USP 是 pandas 和 modin pandas 之间的唯一区别是 import 声明。要连接多个 DataFrame,请使用单个pd.concat调用而不是 Nappend调用以获得更好的性能。

df_list = []
for df in pd.read_csv('./samp.csv', chunksize=50):
    df_list.append(calculate_visit_prioritization(df))

big_df = pd.concat(df_list, ignore_index=True)
big_df.to_csv('samps3.csv', index=False)

这也应该优雅地处理空的子数据帧。

于 2019-06-15T14:52:34.507 回答