使用python脚本推断Excel文件中的数据

时间:2019-04-03 12:37:13

标签: python mysql excel pandas extrapolation

我有一些国家/地区的给定数据集,其中包含以下字段:

DATE
SOURCE COMPANY 
DESTINATION COMPANY 
QUANTITY
UNITS

我有2天的数据,我需要用每个公司的日期和数量值推断一年的数据,并在excel中打印结果。

我需要为每个公司x发送1行到每个公司y,为期1年。日期可以是从2018年到今天,数量可以相差+/-100。

代码

import pandas as pd 
import numpy as np 
import os 
import datetime 
import random 
import sys 
from datetime import timedelta 

df = pd.read_csv("Location") 
df_1 = df 
for i in range(1,366): 
  for i in range(0,df.shape[0]): 
    df['Quantity'][i] = df['Quantity'][i] + random.randint(-100,100)    
    df['Date'][i] = pd.to_datetime(df['Date'])[i] + timedelta(days = -1)

df_1 = pd.concat([df_1,df]) 
df_1.to_csv("Extrapolated_data.csv",sep = '')

但是它消耗的时间是无法接受的,我该如何改善它

1 个答案:

答案 0 :(得分:0)

我认为您在注释中张贴的代码存在一些问题,需要您注意:

    需要将sep参数中的
  1. df_1.to_csv()设置为字符,即“,”或“;”。 (请参见here),否则,如果您不想使用其他分隔符,请简单地忽略它,然后使用“,”
  2. 您的源文件上没有.csv扩展名(可能很好)
  3. 分配df_1 = df不仅将复制DataFrame的列/元数据,还将复制DataFrame 包括所有数据。这将导致一个包含原始数据和生成数据的文件。

更新代码

由于我还是熊猫的新手,所以我没有办法只对行进行迭代,而不得不对行和列进行迭代,这导致了下面的代码。我的样本文件共有约40行,结果文件有〜13.000行,文件大小为619 KB。创建时间为60,007秒。从代码中删除时间计算和随机性,可将创建时间减少至54,38秒。这不是超级快,但我也不会称之为超级慢。

import pandas as pd 
import numpy as np 
import os 
import datetime 
import random 
import sys 
from datetime import timedelta 
from timeit import default_timer as timer

df = pd.read_csv("orders.csv") 
df_1 = pd.DataFrame(columns=df.columns) 
start = timer()

for d in range(1,366):
  for index, dfc in df.iterrows():

    dfc['Quantity'] = dfc['Quantity'] + random.randint(-100,100)    
    dfc['Date'] = pd.to_datetime(dfc['Date']) + timedelta(days = -d)
    df_1 = df_1.append(dfc, ignore_index=True)

  print("Loop ",d)  

end = timer()
print(end - start) 

df_1.to_csv("Extrapolated_data.csv",sep = ',')