我有一个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列的数据帧。
答案 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