Python 如何将字符串作为行的数据转换为字符串中的每个单词作为同一列中的行?

Python 如何将字符串作为行的数据转换为字符串中的每个单词作为同一列中的行?,python,string,pandas,Python,String,Pandas,如何将字符串作为行的数据转换为字符串中的每个单词作为同一列中的行 例如: 到 使用空格连接系列并再次拆分: pd.Series(' '.join(s).split()) 0 I 1 love 2 python 3 I 4 hate 5 programming dtype: object 或者,您可以使用pd.Series.str.cat来完成连接 pd.Series(s.str.

如何将字符串作为行的数据转换为字符串中的每个单词作为同一列中的行

例如:


使用空格连接系列并再次拆分:

pd.Series(' '.join(s).split())

0              I
1           love
2         python
3              I
4           hate
5    programming
dtype: object
或者,您可以使用
pd.Series.str.cat
来完成连接

pd.Series(s.str.cat(sep=' ').split())

0              I
1           love
2         python
3              I
4           hate
5    programming
dtype: object

按空格拆分,然后调用堆栈:

s.str.split(expand=True).stack().reset_index(drop=True)

0              I
1           love
2         python
3              I
4           hate
5    programming
dtype: object
提供另一个带有
np.chararray.split
/
str.split
+
itertools.chain
的选项:

from itertools import chain
pd.Series(list(
     chain.from_iterable(np.chararray.split(s.values.astype(str), sep=' ').tolist())
))
或者


计时
虽然这对时间来说很有趣,但有很多选择。首先,设置:

s = pd.concat([s] * 10000, ignore_index=True)
现在,时间安排:

# in this answer

%timeit s.str.split(expand=True).stack().reset_index(drop=True)
87.6 ms ± 2.43 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
pd.Series(list(
     chain.from_iterable(np.chararray.split(s.values.astype(str), sep=' ').tolist())
))

38.1 ms ± 342 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit pd.Series(list(itertools.chain.from_iterable(s.str.split().tolist()))
24.9 ms ± 124 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

piR的答案显然是赢家!Python的字符串操作在这里非常快,因为它们以C速度运行。

首先将值设置为
列表,然后设置为平坦:

df = pd.DataFrame({'col':np.concatenate(df['col'].str.split().values)})

0              I
1           love
2         python
3              I
4           hate
5    programming
dtype: object
s = pd.concat([s] * 10000, ignore_index=True)
# in this answer

%timeit s.str.split(expand=True).stack().reset_index(drop=True)
87.6 ms ± 2.43 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
pd.Series(list(
     chain.from_iterable(np.chararray.split(s.values.astype(str), sep=' ').tolist())
))

38.1 ms ± 342 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit pd.Series(list(itertools.chain.from_iterable(s.str.split().tolist()))
24.9 ms ± 124 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
# jezrael

%timeit np.concatenate(s.str.split().values)
88.2 ms ± 1.8 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit pd.Series([item for sublist in s.str.split() for item in sublist])
27.5 ms ± 590 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
# piRSquared

%timeit pd.Series(' '.join(s).split())
7.33 ms ± 234 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit pd.Series(s.str.cat(sep=' ').split())
8.93 ms ± 106 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
df = pd.DataFrame({'col':np.concatenate(df['col'].str.split().values)})
df = pd.DataFrame({'col': [item for sublist in df['col'].str.split() for item in sublist]})

print (df)
           col
0            I
1         love
2       python
3            I
4         hate
5  programming