Here显示了如何将包含列表的单元格扩展为大熊猫中自己的变量。 也有此解决方案:
df.apply(lambda x: pd.Series(x['tags']),axis=1)
但是我不知道它是如何工作的。任何人都可以解释。
答案 0 :(得分:2)
这意味着将列->where([
['item_type', 'App\Models\Extra'],
['item_id', 1]
])
的每个值转换为tags
,然后将它们转换为Series
-它一起连接DataFrame
。 Series
表示按行处理,其中每一行都转换为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。