【发布时间】:2020-02-10 08:05:15
【问题描述】:
我对 Python 和数据科学真的很陌生。
我有一个包含 100K+ 行的数据集,并且像 30 列(两个日期时间、27 个整数和 1 个字符串)。 我想通过计算我的两个日期时间列之间的差异来创建第 31 列,并在几秒钟内得到结果。另外,我想让“-5000”作为我两个日期之间的最小差异。
所以为了简单起见,我们只关注两个 Datetime 列。
目标是从这个出发:
first_datetime second_datetime
0 2019-03-13 04:35:30 2019-03-13 05:35:30
1 2019-03-13 05:35:30 2019-03-13 06:35:30
2 2019-03-13 05:35:30 2019-03-14 06:35:30
到这里:
diff first_datetime second_datetime
0 -3600 2019-03-13 04:35:30 2019-03-13 05:35:30
1 -10 2019-03-13 05:35:30 2019-03-13 05:35:40
2 -5000 2019-03-13 05:35:30 2019-03-14 05:35:40
有人告诉我 .apply 函数是最快的,所以我用它来制作这个函数:
def calc_diff(row):
diff=int((row['first_datetime']-row['second_datetime']).total_seconds())
if diff<-5000:
return -5000
else:
return diff
我将它与 .apply 函数一起使用:
df = pd.DataFrame([{'first_datetime': "2019-03-13 04:35:30", 'second_datetime': "2019-03-13 05:35:30"},{'first_datetime': "2019-03-13 05:35:30", 'second_datetime': "2019-03-13 05:35:40"}])
df['diff']=df.apply(calc_diff, axis=1)
问题是我遇到了内存错误,我做错了什么?实现这一目标的最佳方法是什么?
【问题讨论】:
-
能否添加错误的完整回溯?
-
因为您的代码对我有用,如果您修复列名拼写错误。您在数据框中有
'secod_datime',在calc_diff中有'second_datetime'。所以也许只是一个错字。 -
@Valentino 的错字只是为了说明它,我不能用实际的数据集输入让它“容易理解”
-
列名必须匹配。如果它们不匹配,则会出现错误。正如我所说,如果你修正了错字,你的代码就会工作,你会得到预期的结果。那么真正的问题是什么?
-
@Valentino 真正的问题是:如何在处理包含 100K+ 或 1M 行的大型数据集时实现这样的目标
标签: python pandas dataset data-science