我在 Pandas 数据框中有一列由可变长度列表组成,我正在尝试找到一种有效的方法来提取以列表长度为条件的元素。考虑这个最小的可重现示例:
t = pd.DataFrame({'a':[['1234','abc','444'],
['5678'],
['2468','def']]})
假设我想将第二个元素(如果相关)提取到新列中,否则使用 NaN。我能够以一种非常低效的方式获得它:
_ = []
for index,row in t.iterrows():
if (len(row['a']) > 1):
_.append(row['a'][1])
else:
_.append(np.nan)
t['element_two'] = _
我尝试使用np.where()
,但我没有正确指定“if”参数:
np.where(t['a'].str.len() > 1, lambda x: x['a'][1], np.nan)
对其他解决方案的更正和提示将不胜感激!我来自 R,我认为矢量化是理所当然的。
我使用的是 pandas 0.25.3 和 numpy 1.18.1。
最佳答案
使用str
访问器:
n = 2
t['second'] = t['a'].str[n-1]
print(t)
a second
0 [1234, abc, 444] abc
1 [5678] NaN
2 [2468, def] def
关于pandas - 基于可变长度的 Pandas 数据帧列中的索引列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60325190/