我正在尝试添加一个Pandas DataFrame列,其中包含另一列中字符串的长度。
csv = pd.read_csv('data/sentiments.csv', dtype=str)
csv['length'] = csv['text'].astype(str).apply(len)
csv.head()
text polarity length
0 -Mi hijo es tan rico que le regalo un BMW a su... NEUTRAL 64
1 The new BMW 3 Series is awarded 5 stars in the... POSITIVE 64
2 @GEAGarratt BMW hand over 200 + electric vehic... POSITIVE 64
3 I asked Sauber about more info or images of th... NEUTRAL 64
4 bmw >>> NEUTRAL 7
正如您在上一栏中所看到的,它表示每行的长度为64.另一方面,当我执行以下操作时:
len(csv.iloc[0]['text'])
第一行正确输出长度为140。
怎么了?
答案 0 :(得分:1)
为了避免astype
类型提升逻辑可能出现的问题,您还可以尝试:
csv['length'] = csv['text'].apply(lambda x: len(str(x)))
您也可以使用map
代替apply
,因为您正在使用Series
的值进行操作。
使用此lambda
与本机矢量化astype
相比不是最理想的,因此您应该在解决问题后切换回此变通方法。
其他一些可能的混淆因素:(1)每个元素的type
与Series
的{{1}},(2)被截断的空格......
答案 1 :(得分:1)
您的代码和测试数据在我的计算机中正常运行。确保你的大熊猫没有过时。最新的稳定版本是0.12。
Pandas提供了一些vectorized string methods。你可以使用
csv['length'] = csv['text'].str.len()
代替。
感谢@Jeff,最新版本0.13但不是0.12