我有一个数据集,其中包含一个以YYYYMM格式存储数据的列。在研究失败后(我不知道如何将日期时间应用于此),我创建了一个帮助函数来手动拆分它,并使用.apply()函数将该函数应用于每一行。然而,这花费了大量的时间,我不禁相信有一种更好的方法可以做到这一点。
任何援助是赞赏。
def splitYearMonth (date:int):
date = str(date)
date = list(date)
yearList = date[:4]
year = ''
year = year.join(yearList)
year = int(year)
monthList = date[-2:]
month = ''
month = month.join(monthList)
month = int(month)
return year, month
个字符
4条答案
按热度按时间rpppsulh1#
试试看:
字符串
打印:
型
mpgws1up2#
几个建议:
1.使用datetime.strpftime
字符串
1.使用dateutil.parser
型
qvk1mo1f3#
我希望这将工作:
字符串
xtfmy6hx4#
你的猜测是正确的,使用
apply()
与自定义函数并不是最快的方法。向量化操作(即一次应用于整个数据列的操作)在许多情况下要快几个数量级。引用following website:向量化比循环/迭代和应用快得多的原因是它不是每次都计算整行,而是将参数应用于整个数据集。向量化是一次将操作应用于整个数据数组的过程,而不是单独操作数组的每个元素。这允许更有效地使用内存和CPU资源。
当使用Loops或Apply对Pandas数据框执行计算时,操作将按顺序应用。这会导致重复访问内存、计算和更新值,这可能会导致速度缓慢和资源密集型。
另一方面,向量化操作在Cython(C或C++中的Python)中实现,并利用CPU的向量处理能力,可以一次执行多个操作,通过同时计算多个参数进一步提高性能。向量化操作还避免了不断访问内存的开销,这是循环和应用的支柱。
矢量化代码在实践中是什么样子的?例如:
字符串
它打印:
型