列表的熊猫列:如何设置项目的dtype

时间:2019-02-20 18:41:24

标签: python pandas

我有一个数据框,其中有多个包含列表的列,并且每一行中列表的长度不同:

class TodaysResultsSerializer(serializers.ModelSerializer):
    class Meta:
        model = TodaysResults
        fields = ('place', 'foreignModel1__name', 'foreignModel1__foreignModel2__title')

数据框是三个不同数据框的组合,我不确定列表中的项目是否具有相同的dtype。例如,在user_mentions列中,有时数据如下:

tweetid tweet_date    user_mentions       hashtags
00112   11-02-2014    []                  []
00113   11-02-2014    [00113]             [obama, trump]
00114   30-07-2015    [00114, 00115]      [hillary, trump, sanders]
00115   30-07-2015    []                  []

但有时是这样的:

[00114, 00115]

如何为列表中的项目设置dtype?

3 个答案:

答案 0 :(得分:6)

Pandas DataFrame并不是真正设计用来将列表作为行/列值来容纳的,因此这就是您面临困难的原因。你可以做

python3.x:

df['user_mentions'].apply(lambda x: list(map(int, x)))

python2.x:

df['user_mentions'].apply(lambda x: map(int, x))

在python3中,当返回映射对象时,因此您必须转换为列表,而在python2中,这不会发生,因此您无需明确地将其称为列表。

在上面的lambda中,x是您的行list,您正在将值映射到int

答案 1 :(得分:2)

df['user_mentions'].map(lambda x: ['00' + str(y) if isinstance(y,int) else y for y in x]) 如果您的目标是将所有user_mentions转换为str,则上述方法可能会有所帮助。我也将研究unnesting的这篇文章。 如之前提到 ;熊猫并非真正旨在将列表作为值来容纳。

答案 2 :(得分:1)

这应该工作,我在第一列中包含字符串

df[0].apply((lambda x: [str(y) for y in x]))