我正在对每个文件大约 6GB 的大文件进行计算,并遇到了 Modin pandas,我听说它比 pandas 进行了优化。
我需要分块读取 CSV 文件并对其执行计算,然后将其附加到一个大的 dataframe 中,然后再次将大 dataframe 转换为 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
for empty DataFrame defaulting to pandas implementation.File "/home/tony/.local/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 289, in
__init__
raise TypeError(msg)TypeError: cannot concatenate object of type ""; only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid
我经历过这个link据说 pandas 的 .append()
函数部分 ( P ) 在 Modin 中实现。
最佳答案
Modin 的 USP 是 pandas 和 modin pandas 之间的唯一区别是 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。
关于python - 如何将 Modin pandas 数据框附加到其他数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56610919/