【发布时间】:2020-06-10 20:44:12
【问题描述】:
我在数据框中有一个列,其中包含索引(病毒)和要制表并希望转换为宽格式的数据。
输入数据
virus1
AGCTGAGTGAG # sequence
40.1 # score 1
23 # score 2
102 # score 3
virus2
AGCTGAGTGAG # sequence
43.4 # score 1
32 # score 2
101 # score 3
virus3
AGTTGAGTGAG # sequence
41.3 # score 1
35 # score 2
100 # score 3
.... >100 inputs
数据帧输出
sequence score1 score2 score3
virus1 AGCTGAGTGAG 40.1 43.4 41.3
virus2 AGCTGAGTGAG 23 32 35
virus3 AGTTGAGTGAG 102 101 100
我尝试将数据导入单个数据框并将行移动到新数据框的列中
代码
df = pd.read_csv(file, sep='\n', header=None)
index_labels = df.iloc[::4].astype(str)
dfvirus = pd.DataFrame(index=labels)
dfvirus['sequence'] = df.iloc[1::5].astype(str)
dfvirus['score1'] = df.iloc[2::5].astype(float)
dfvirus['score2'] = df.iloc[3::5].astype(int)
dfvirus['score3'] = df.iloc[4::5].astype(int)
上述方法不起作用我得到 NaN 或 nan 的值,例如dfvirus['sequence'].head() 取决于输入是数字还是字符串。我可以通过构建分层索引来做到这一点,但这意味着将一个很长的索引循环到list。
从长格式转换为宽格式是一个常见问题,如果您能提供一个更简单的解决方案或我在这里出错的地方,我将不胜感激。
【问题讨论】:
标签: python-3.x pandas