Python Pandas将字符串拆分为列(series到dataframe)

2024-04-25 06:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的问题。这里是: 我有一系列的线:

In [54]: import pandas as pd

In [55]: pd.Series(["01234", "asdfg"])
Out[55]: 
0    01234
1    asdfg
dtype: object

我需要的是一个dataframe,它对字符串的每个位置都有一个列。所有弦的长度相等。在

^{pr2}$

你能帮帮我吗? 我试过各种字符串操作。。。在


Tags: 字符串inimportdataframepandasobjectasout
3条回答

假设“所有字符串的长度都相等”,我将使用pandas.Series.str.extract()函数:

from __future__ import print_function

import pandas as pd

s = pd.Series(["01234", "asdfg"])
print('Original series:\n', s)

re_pat = ''.join(['(?P<col{0}>.)'.format(i) for i in range(1, len(s[0]) +1)])
print('\nRegEx for s.str.extract():\t{0}'.format(re_pat))

df = s.str.extract(re_pat)
print('\nresulting DF:\n', df)

输出:

^{pr2}$

当然,您不必显式地命名列:

^{3}$

输出:

resulting DF:
   0  1  2  3  4
0  0  1  2  3  4
1  a  s  d  f  g

如果已经构造了一个序列s

df = s.apply(lambda x: pd.Series(list(x)))

如果从原始数据开始,直接转到数据帧可能更容易:

^{pr2}$

如果您有一个string dtype的NumPy数组:

In [22]: arr
Out[22]: 
array(['01234', 'asdfg'], 
      dtype='|S5')

然后,可以将其视为一个dtype 'S1'数组,将每个字符串拆分为1字节字符:

^{pr2}$

然后对其进行整形以获得所需的形状:

^{3}$

因此

import pandas as pd

s = pd.Series(["01234", "asdfg"])
n = len(s[0])

df = pd.DataFrame(s.values
                  .astype('S{}'.format(n))
                  .view('S1')
                  .reshape(len(s), -1))

print(df)

收益率

   0  1  2  3  4
0  0  1  2  3  4
1  a  s  d  f  g

相关问题 更多 >