我正在对每个文件大约 6GB 的大文件执行计算,并遇到了 Modin熊猫,我听说它与熊猫相比是经过优化的。
我需要分块读取CSV文件并进行计算,然后将其附加到大的数据框,然后再次将大数据框转换为 CSV 文件。 / p>
这对于熊猫来说绝对可以正常工作。但是,即使是很小的文件,也要花费太多时间。而且我什至无法想象 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熊猫添加数据框时出错。
UserWarning:
DataFrame.append
表示默认为空的DataFrame 熊猫的实现。文件 “ /home/tony/.local/lib/python3.6/site-packages/pandas/core/reshape/concat.py”, 第289行,在
__init__
中引发TypeError(msg)TypeError:无法连接类型为“”的对象;仅pd.Series,pd.DataFrame, 和pd.Panel(不建议使用)objs有效
我已经遍历了link,据说熊猫的.append()
功能在Modin中实现了部分(P)。
答案 0 :(得分:1)
Modin的USP是,熊猫和modin熊猫之间的唯一区别是import声明。要串联多个DataFrame,请使用单个pd.concat
调用而不是N append
个调用以提高性能。
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)
这也应该很好地处理空的子DataFrame。