在大循环中优化时间熊猫to_csv

泰利斯马克斯

我正在使用400.000行数据框(实际上,它更大,但出于测试目的,我使用此维度)。

我需要根据两个条件将多个文件导出到txt / csv:#RIC和日期。

在这些条件下循环是一个非常缓慢的过程,因此我正在寻找一种更快的方法来实现。

那是我最初的想法:

def SaveTxt(df, output_folder=None):

# Start time
start_time = time.time()
# Data Frame with date
df['Date'] = pd.to_datetime(df['Date-Time']).dt.date
dates = df['Date'].unique()
ticks = df['#RIC'].unique()

for tick in ticks:
    for date in dates:
        # print(date, tick)
        # Filtering by instrument and date
        temp_df = df[(df['#RIC'] == tick) & (df['Date'] == date)]
        if temp_df.empty:
            pass
        else:
            # Saving files
            if output_folder in [None, ""]:
                temp_df.to_csv("%s_%s.txt" % (date, tick))
            else:
                temp_df.to_csv("%s\\%s_%s.txt" % (output_folder, date, tick))


# Elapsed time
elapsed_time = time.time() - start_time
elapsed_time = time.strftime("%H:%M:%S", time.gmtime(elapsed_time))
# Priting elapsed time
print('Elapsed time: %s' % elapsed_time)

对于400.000行(相当于5天的数据),运行此脚本需要3分钟。一年的时间是6个小时,而我没有尝试10年,但是我认为这不是一个好主意。

解决思路

我试图从df中删除每个循环中使用的数据,但是这种情况不起作用(也许这将删除数据帧的大小,并使代码运行速度更快):

df = df[(df['#RIC'] != tick) & (df['Date'] != date)]

我相信这应该从数据框中删除每个刻度和日期,但是它是单独应用此条件的。

如果您能解决此问题,我将不胜感激。

谢谢

编辑

不知道这是否是共享数据样本的最佳方法(我无法在代理下上传)


#RIC日期价格量
DIJF21 16/10/2019 4.64 15 
DIJF21 16/10/2019 4.64 40 
DIJF21 16/10/2019 4.64 100 
DIJF21 16/10/2019 4.64 5 
DIJF21 16/10/2019 4.64 1765 
DIJF21 16/10 / 2019 4.64 10 
DIJF21 16/10/2019 4.64 100 
DIJF21 16/10/2019 4.64 1000 
DIJF21 16/10/2019 4.64 5 
DIJF21 16/10/2019 4.64 20 
DIJF21 16/10/2019 4.64 80 
DIJF21 16/10/2019 4.64 25 
DIJF21 16/10/2019 4.64 25 
DIJF21 16/10/2019 4.64 150 
DIJF20 15/10/2019 4.905 2000 
DIJF20 15/10/2019 4.905 2000 
DIJF20 15/10/2019 4.903 10
ow

事先提供数据样本以测试答案会很有帮助。像这样,我只是希望它能正常工作;)

您应该能够将groupby与自定义函数一起使用,该函数将应用于每个组,如下所示:

def custom_to_csv(temp_df, output_folder):
    date, tick = temp_df.name
    # Saving files
    if output_folder in [None, ""]:
        temp_df.to_csv("%s_%s.txt" % (date, tick))
    else:
        temp_df.to_csv("%s\\%s_%s.txt" % (output_folder, date, tick))

df.groupby(['Date', '#RIC']).apply(custom_to_csv, (output_folder))

编辑:更改dftemp_df(output_folder,)(output_folder)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用LINQ优化时间循环

来自分类Dev

小循环中的大循环总是比大循环中的小循环快?

来自分类Dev

为什么小循环中的大循环比大循环中的小循环快?

来自分类Dev

小循环中的大循环总是比大循环中的小循环快?

来自分类Dev

排序优化时间

来自分类Dev

使用熊猫在for循环中读取csv

来自分类Dev

优化时间范围函数

来自分类Dev

使用NSJSONSerialization在大循环中使用ARC的内存问题

来自分类Dev

熊猫to_csv()禁用浮动

来自分类Dev

优化熊猫循环

来自分类Dev

分割错误-大循环

来自分类Dev

熊猫to_csv逗号替换为

来自分类Dev

熊猫数据框to_csv格式输出

来自分类Dev

熊猫-使用to_csv编写Multiindex行

来自分类Dev

熊猫逃生马车返回to_csv

来自分类Dev

熊猫to_csv输出引用问题

来自分类Dev

熊猫的to_csv呼叫以逗号开头

来自分类Dev

熊猫列的To_CSV唯一值

来自分类Dev

熊猫to_csv应该抑制指数

来自分类Dev

熊猫,to_csv()为特定格式

来自分类Dev

熊猫to_csv函数遇到问题

来自分类Dev

在熊猫本地化时间戳

来自分类Dev

使用大循环读取/写入大数组-执行时间问题

来自分类Dev

在for循环中优化add_trace()?

来自分类Dev

在for循环中优化add_trace()?

来自分类Dev

优化循环中的顺序搜索

来自分类Dev

Python优化嵌套for循环中的重塑操作

来自分类Dev

GNU GMP大循环限制

来自分类Dev

Tkinter停止大循环功能