如何将“包含列表的单元格扩展到大熊猫中自己的变量中”

时间:2019-01-06 09:36:51

标签: python pandas list

Here显示了如何将包含列表的单元格扩展为大熊猫中自己的变量。 也有此解决方案:

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

但是我不知道它是如何工作的。任何人都可以解释。

2 个答案:

答案 0 :(得分:2)

这意味着将列->where([ ['item_type', 'App\Models\Extra'], ['item_id', 1] ]) 的每个值转换为tags,然后将它们转换为Series-它一起连接DataFrameSeries表示按行处理,其中每一行都转换为Series,因此需要axis=1来选择x['tags']

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

tags

如果性能很重要并且DataFrame较大,则最好使用:

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)

性能

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

答案 1 :(得分:0)

apply使您可以将DataFrame的所有行(轴= 1)或列(轴= 0)传递给作为函数的参数,该函数作为apply-function的参数给出。基本上你写

import re

def find_sgf_groups(s: str):
    sgf_groups = []
    for m in re.finditer(r'[A-Z](\[[a-zA-Z]+\])+', s):
        sgf_groups.append(m.group())

    return sgf_groups

print(find_sgf_groups('A[B][q]'))
print(find_sgf_groups('A[B][q]G[boy]'))

该函数可以像numpy sum-function一样预定义,也可以声明一个lambda表达式。

在这种情况下,数据帧“ df”的每一行“ x”作为Series对象传递给函数“ pd.Series(x ['tags'])”。对于每一行,将使用tags-column的值创建一个新的Series对象。

如果对所有行都执行此操作,则最终会得到一堆单个Series对象,这些对象最后用于创建新的DataFrame。