df['new_col'] = [val[0] if hasattr(val, '__iter__') else None for val in df["A"]]
>>> df
A new_col
0 [1, 2] 1
1 [3, 4] 3
2 [8, 9] 8
3 [2, 6] 2
时间**
df = pd.concat([df] * 10000)
%timeit df['new_col'] = [val[0] if hasattr(val, '__iter__') else None for val in df["A"]]
100 loops, best of 3: 13.2 ms per loop
%timeit df["new_col"] = df["A"].str[0]
100 loops, best of 3: 15.3 ms per loop
%timeit df['new_col'] = df.A.apply(lambda x: x[0])
100 loops, best of 3: 12.1 ms per loop
%timeit df.A.map(lambda x: x[0])
100 loops, best of 3: 11.1 ms per loop
取消安全检查以确保可接受性。
%timeit df['new_col'] = [val[0] for val in df["A"]]
100 loops, best of 3: 7.38 ms per loop
5条答案
按热度按时间f3temu5u1#
与往常一样,记住在帧中存储非标量对象通常是不受欢迎的,并且实际上应该仅用作临时的中间步骤。
也就是说,你可以使用
.str
访问器,即使它不是一列字符串:qpgpyjmq2#
您可以使用
map
和lambda
函数30byixjq3#
将
apply
与x[0]
一起使用:sxissh064#
可以使用
str.get
方法(与str[]
相同):它的行为类似于Python字典的
get
方法,如果缺少所需的索引,则返回NaN
。例如:输出:
7bsow1i65#
你可以只使用一个条件列表解析,它接受任何可迭代对象的第一个值,或者对该项目使用None。列表解析是非常Python化的。
取消安全检查以确保可接受性。