如何获得一列中每个元素的长度

时间:2019-04-07 19:14:44

标签: python pandas

在csv文件中,有一列称为“ no_pun”。其中有一些标记词。我想获取此列中每个元素的长度。这在python中很容易。但是我有一个错误。

我的代码:

for i in range(0,len(data['no_pun'])):
    data["len_desc"][i] = len(data["no_pun"][i])

KeyError:

  KeyError Traceback (most recent call last)
/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2655             try:
-> 2656                 return self._engine.get_loc(key)
   2657             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'len_desc'

在处理上述异常期间,发生了另一个异常:

4 个答案:

答案 0 :(得分:0)

您似乎试图为列表中不存在的键(在这种情况下为len_desc)分配一个值。

调查数据的内容,看看是否所有项目都有len_desc键,我希望至少有一个丢失。

答案 1 :(得分:0)

data["len_desc"]可能未初始化为列表。您可能需要先设置它,然后再运行函数。但是,一种更好的方法是使用list comprehensiondata["len_desc"] = [len(data) for data in data["no_pun"]]

答案 2 :(得分:0)

您可以使用apply方法在列的每一行上使用该函数,并将其保存在数据框中称为“ a”的新列中。

data['a'] = data['no_pun'].apply(lambda x: len(x))

如果需要使用for循环进行迭代并保存到新列,则可以使用iteritems()。首先,您需要创建一个带有虚拟数字的列。

data['b'] = 0#dummy column creation
for index, row in data['no_pun'].iteritems():#loop
     data['b'][index] = len(row)

答案 3 :(得分:0)

这会在现有数据框中添加一个新列,其长度为no_pun列中的字符串:

data['NewColumnName'] = [len(x) for x in data['no_pun']]

data['no_pun'].str.len()