我想从数据框NameAndID
列Name
列中显示的NamesAndIDs
列中删除文字,并将其放入名为{{{{}}的新列中1}}。但有时IDOnly
中的文字实际上并未显示在Name
中,因此我希望NameAndID
列中显示为NaN
。
e.g。我想转向以下数据框:
IDOnly
成:
Name NameAndID IDOnly
Lovely Place Lovely Place 6D456 NaN
Great Town Something 7GL2 NaN
我尝试过以下方式使用Name NameAndID IDOnly
Lovely Place Lovely Place 6D456 6D456
Great Town Something 7GL2 NaN
:
DataFrame.replace
我的数据帧很大(125k行),这需要很长时间(50分钟后放弃)。我试过在一个小的随机样本(1000行)上计时,得到500毫秒的时间。这告诉我有些事情是错的。
问题:无论如何要快速实现我的目标?
我在另一个尺寸小25倍的数据帧上尝试了这个,并且它在6秒内运行,因此您可以预期在当前数据帧上需要6秒x 25 = 150秒或2.5分钟。
提前致谢。
罗布
修改
我尝试将我的代码拆分成块,并在大约1分钟内运行。所以我怀疑存在内存使用问题。
NamesAndIDs['IDOnly'] = NamesAndIDs['NameAndID'].replace(to_replace =
NamesAndIDs['Name'], value = '', regex = True)
这很奇怪,因为我正在运行Yosemite OSX和8GB RAM。我的实际数据帧是8列宽,都带有文本变量。每个列条目的长度少于256个字符。所以8 * 256 * 125000/10 ^ 9 = 0.25 GB。
问题:为什么将我的代码拆分成块使得运行速度更快?
答案 0 :(得分:0)
使用字符串拆分?
import pandas as pd
df = pd.DataFrame({'NID' : ['Lovely Place 6D456', 'Great Town Something 7GL2']})
df['ID'] = pd.Series([val[-1] for val in df['NID'].str.split()])
假设ID始终存在且始终是字符串的最后一部分。