尝试将文本列表转换为小写,但将所有内容都转换为NaN

时间:2019-06-19 18:45:47

标签: python pandas nlp series lowercase

我目前正在尝试处理文本数据,对此我还比较陌生。我要使用的列是强制转换列,如下所示:

0    [Sam Worthington, Zoe Saldana, Sigourney Weave...
1    [Johnny Depp, Orlando Bloom, Keira Knightley, ...
2    [Daniel Craig, Christoph Waltz, Léa Seydoux, R...
3    [Christian Bale, Michael Caine, Gary Oldman, A...
4    [Taylor Kitsch, Lynn Collins, Samantha Morton,...
Name: cast, dtype: object 

我想要的是降低所有大写字母。但是,当我尝试执行此操作时,它将所有内容转换为NaN值。

这是我做过的简单的事情:

data.cast=data.cast.str.lower()

以下是输出:

0      NaN
1      NaN
2      NaN
3      NaN
4      NaN
5      NaN
6      NaN
7      NaN
8      NaN
9      NaN
10     NaN
11     NaN
12     NaN
13     NaN
14     NaN
15     NaN
16     NaN
17     NaN
18     NaN
19     NaN
20     NaN
21     NaN
22     NaN
23     NaN
24     NaN
25     NaN
26     NaN
27     NaN
28     NaN
29     NaN
        ..

任何人都可以帮助我了解我在做错什么以及如何解决它吗?谢谢您的宝贵时间!

2 个答案:

答案 0 :(得分:3)

您尝试使用字符串方法转换包含列表的列。因此您需要创建一个简单的函数,例如:

def lower(l):
    return [x.lower() for x in l]

并使用地图删除大写字母

data = pd.DataFrame([{'col':['Titi','Toto','Tutu']},{'col':['Tata','Toto','Tutu']}])
data.col = data.col.map(lower)
data

结果是:

    col
0   [titi, toto, tutu]
1   [tata, toto, tutu]

答案 1 :(得分:1)

简单的方法是对每个列表使用listcomp和map str.lower

s[:] = [list(map(str.lower, x)) for x in  s]

Out[915]:
0    [ zoe saldana,  sigourney weave, sam worthington]
1      [ orlando bloom, johnny depp,  keira knightley]
2       [daniel craig,  christoph waltz,  léa seydoux]
3       [ michael caine,  gary oldman, christian bale]
4     [ samantha morton, taylor kitsch,  lynn collins]
dtype: object