我有一些国家/地区的给定数据集,其中包含以下字段:
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 = '')
但是它消耗的时间是无法接受的,我该如何改善它
答案 0 :(得分:0)
我认为您在注释中张贴的代码存在一些问题,需要您注意:
sep
参数中的df_1.to_csv()
设置为字符,即“,”或“;”。 (请参见here),否则,如果您不想使用其他分隔符,请简单地忽略它,然后使用“,” .csv
扩展名(可能很好)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 = ',')