首页 > 解决方案 > 使用python脚本推断excel文件中的数据

问题描述

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

DATE
SOURCE COMPANY 
DESTINATION COMPANY 
QUANTITY
UNITS

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

我需要每家公司 1 行x交付给每家公司y1 年。日期可以从 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 = '')

但是它消耗的时间是不可接受的,我该如何让它变得更好

标签: pythonmysqlexcelpandasextrapolation

解决方案


我认为您在对问题的评论中发布的代码存在一些问题,您必须注意:

  1. sepdf_1.to_csv()参数中需要设置一个字符即“,”或“;” (请参阅此处),否则如果您不想使用另一个分隔符,则只需省略它,然后“,”
  2. 您的源文件没有.csv扩展名(这可能很好)
  3. 分配不仅会复制 DataFrame 的列/元数据,还会复制包含所有数据df_1 = df的 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 = ',')

推荐阅读