为什么我的apply函数不返回字符串的长度?

时间:2014-01-21 18:12:08

标签: python pandas type-conversion

我正在尝试添加一个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。

怎么了?

2 个答案:

答案 0 :(得分:1)

为了避免astype类型提升逻辑可能出现的问题,您还可以尝试:

csv['length'] = csv['text'].apply(lambda x: len(str(x)))

您也可以使用map代替apply,因为您正在使用Series的值进行操作。

使用此lambda与本机矢量化astype相比不是最理想的,因此您应该在解决问题后切换回此变通方法。

其他一些可能的混淆因素:(1)每个元素的typeSeries的{​​{1}},(2)被截断的空格......

答案 1 :(得分:1)

您的代码和测试数据在我的计算机中正常运行。确保你的大熊猫没有过时。最新的稳定版本是0.12。

Pandas提供了一些vectorized string methods。你可以使用

csv['length'] = csv['text'].str.len()

代替。

更新

感谢@Jeff,最新版本0.13但不是0.12