Это означает преобразование каждого значения столбца tags
в Series
, которые преобразуются в DataFrame
- это соответствует Series
вместе. axis=1
означает процессы по строкам, где каждая строка преобразуется в Серию, поэтому для выбора tags
.
необходимо
x['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)