我有一个数据框,其中有多个包含列表的列,并且每一行中列表的长度不同:
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?
答案 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]))