python - 如何工作 "expand cells containing lists into their own variables in pandas"

标签 python pandas list

Here展示如何将包含列表的单元格扩展为 pandas 中自己的变量。 也有这样的解决方案:

df.apply(lambda x: pd.Series(x['tags']),axis=1)

但我不明白它是如何工作的。任何人都可以解释这一点。

最佳答案

这意味着将tags列的每个值转换为Series,然后将其转换为DataFrame - 它连接Series > 在一起。 axis=1 表示按行处理,每行都转换为 Series,因此需要 x['tags'] 来选择 tags

还可以创建自定义函数以更好地检查每个步骤:

def f(x):
    #each row is convert to Series
    print (x)
    #select row tags
    print (x['tags'])

    #convert list to Series
    return pd.Series(x['tags'])

tags = df.apply(f,axis=1)
print (tags)

如果性能很重要并且 DataFrame 更大,那么最好使用:

tags = pd.DataFrame(df['tags'].values.tolist())
print (tags)
       0     1      2
0  apple  pear  guava
1  truck   car  plane
2    cat   dog  mouse

性能:

# create a dataset
raw_data = {'score': [1,2,3], 
        'tags': [['apple','pear','guava'],['truck','car','plane'],['cat','dog','mouse']]}
df = pd.DataFrame(raw_data, columns = ['score', 'tags'])

# view the dataset
#print (df)

#3000 rows
df = pd.concat([df] * 1000, ignore_index=True)


In [110]: %timeit df.apply(lambda x: pd.Series(x['tags']),axis=1)
792 ms ± 27.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [111]: %timeit df['tags'].apply(pd.Series)
681 ms ± 16.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [112]: %timeit pd.DataFrame(df['tags'].values.tolist())
715 µs ± 8.91 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - 如何工作 "expand cells containing lists into their own variables in pandas",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54060287/

相关文章:

python - 日期列与 pandas 中 groupby 的滚动差异

jquery - 增量列表项类

python - Celery 任务在任务成功后调用自身,无需 celerybeat

python - 在 pg8000 中使用 % 通配符

python - 如何拆分 'number' 以分隔 pandas DataFrame 中的列

python - 如何检查一行中的所有列是否都是正数?

python - 按字符串中单词的数量对字符串列表进行排序

python - 如何在python中将字符串列表转换为字典

python / Pandas : Counting the number of times a value less than x appears in a column

python - 扁平化嵌套字典,压缩键