通过空格拆分pandas DataFrame中的单元格

时间:2018-04-02 17:58:59

标签: python pandas split transformation

我有一个10列200行的Pandas DataFrame(我们称之为'heart')。每个列单元格包含由空格分隔的多个值。虽然每行有10列并且每行中有不同的值,但实际上有76个单独的值在这10行中被需要分成76个不同列的空格划分。因此,一排“心脏”数据框看起来像这样(共有76个值):

procedure Test;
  var
    list: TStringList;
    vrai: boolean;
    nCol, i: integer;

begin
 vrai := true;
 list.Create;
 nCol := 5;
 for i := 0 to nCol-1 do
   if vrai then
     begin
       list.Add(intToStr(i));
       showmessage(IntToStr(list.Count));
     end;
end;

我想要做的是保留我的200行,但是将空格中的数据作为分隔符拆分,最后得到200行和76列的数据帧。

1 个答案:

答案 0 :(得分:0)

试试这个。这是一个例子。循环基本上字符串基于空格分割列中的每个元素。 Tempdf是一个临时数据框,包含许多行(在您的情况下为200),并且只有一个列,其元素是单个列表(在所有76个值的情况下)。最后一行然后展开该列表,以便每个元素都在一列中。

如果每行真正有76个值,它们将按顺序填充。否则,如在此示例中,None被放置在列中,因为行实际上没有相同数量的空白分隔元素。

import pandas as pd
df = pd.DataFrame({'row_name': ['row01', 'row02'],
                  'text_1': ['1254 0 1 1 0', '11 21 -9. -'],
                  'text_2': ['1 1 -9. name', '1 1 -9. -9. e name'],
                  'text_3': ['176 0 0 0 -9 -9', '176 0 -99 -99 name 199  0']})
#   row_name       text_1          text_2                 text_3
#0  row01         1254 0 1         1 1 -9.         176 0 0 0 -9 -9
#1  row02         11 21 -9. -  1 1 -9. e name  176 0 -99 name 199  0

vs = pd.Series()
for col in df.columns[~df.columns.isin(['row_name'])]:
    vs = vs.append(df[col].str.split('\s+'))

tempdf = vs.groupby(vs.index).sum().to_frame()
finaldf = pd.DataFrame(tempdf[0].values.tolist())

#     0   1    2  3  4  5    6  7     8    9  10   11    12   13    14
#0  1254   0    1     1  1  -9.      176    0  0    0    -9   -9  None
#1    11  21  -9.  -  1  1  -9.  e  name  176  0  -99  name  199     0