簡體   English   中英

Python Pandas-將字符串拆分為列(系列為數據框)

[英]Python Pandas - Splitting strings to columns (series to dataframe)

我有一個簡單的問題。 它是:我有一系列的熊貓字符串:

In [54]: import pandas as pd

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

我需要的是一個在字符串的每個位置都有一列的數據框。 所有字符串的長度相等。

Out[55]:
    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)))

如果您是從原始數據開始的,那么直接轉到DataFrame可能會更容易:

data = ["01234", "asdfg"]
df = pd.DataFrame([list(x) for x in data])

如果您有一個NumPy字符串dtype數組:

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

那么您可以將其視為dtype'S1 'S1'的數組,以將每個字符串分成1個字節的字符:

In [23]: arr.view('S1')
Out[23]: 
array(['0', '1', '2', '3', '4', 'a', 's', 'd', 'f', 'g'], 
      dtype='|S1')

然后重塑形狀以獲得所需的形式:

In [24]: arr.view('S1').reshape(2, -1)
Out[24]: 
array([['0', '1', '2', '3', '4'],
       ['a', 's', 'd', 'f', 'g']], 
      dtype='|S1')

因此,

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

假設“所有字符串的長度相等”,我將使用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)

輸出:

Original series:
 0    01234
1    asdfg
dtype: object

RegEx for s.str.extract():
 (?P<col1>.)(?P<col2>.)(?P<col3>.)(?P<col4>.)(?P<col5>.)

resulting DF:
   col1 col2 col3 col4 col5
0    0    1    2    3    4
1    a    s    d    f    g

PS當然,您不必顯式命名列:

re_pat = '(.)' * len(s[0])
print('\nRegEx for s.str.extract():\t{0}'.format(re_pat))

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

輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM