【发布时间】:2019-04-01 06:10:07
【问题描述】:
也许我的问题看起来很复杂,但本质上很简单。我是 Python 的新手,现在我面临代码太慢的问题。下面是代码的优化版本。我会很感激一个小的代码审查和关于如何加快它的建议。我认为最慢的操作是.apply(lambda和分组,但我不知道如何替换它们。
...
for raw_file in raw_files:
reader = pd.read_csv(raw_file, chunksize=100000)
for chunk in reader:
processed_data = task(chunk)
for name, data in processed_data:
save_data(name, data) # some method which saves DataFrame correctly
...
def task(data):
data = data[data['Quantity'] != 0] # remove zero items
# add date parts as columns
data[['dt_year', 'dt_month', 'dt_day', 'dt_day_of_year', 'dt_day_of_week', 'dt_hour']] = \
data.apply(lambda df: to_date_parts(df['SalesDate']), axis=1)
# group by location-item to aggregate in different files
grouped = data.groupby(['LocationID','ItemID'])
result = []
for name, group in grouped:
result += [(name, group)]
return result
def to_date_parts(str_date):
date = dt.datetime.strptime(str_date.split(".")[0], '%Y-%m-%d %H:%M:%S')
dt_year = date.year
dt_month = date.month
dt_day = date.day
dt_day_of_year = date.toordinal() - dt.datetime(date.year, 1, 1).toordinal() + 1
dt_day_of_week = date.weekday()
dt_hour = date.hour
return pd.Series([dt_year, dt_month, dt_day, dt_day_of_year, dt_day_of_week, dt_hour])
【问题讨论】:
-
这是XY Problem,您可以在其中寻求有关 y 解决方案的帮助,但未描述 x 问题。请提供您的情况的背景和总体情况,包括示例数据和输出以进行说明。
标签: python pandas performance datetime dataframe