我有一个数据框,我想在同一单元格中合并两行的内容,并用下划线分隔。 如果这是原始DF:
0 eye-right eye-right hand
1 location location position
2 12 27.7 2
3 14 27.6 2.2
我希望它成为:
0 eye-right_location eye-right_location hand_position
1 12 27.7 2
2 14 27.6 2.2
最终,我想将第0行转换为标题,并为整个df重置索引。
答案 0 :(得分:4)
您可以设置列标签,先通过iloc
进行切片,然后通过reset_index
进行切片:
print(df)
# 0 1 2
# 0 eye-right eye-right hand
# 1 location location position
# 2 12 27.7 2
# 3 14 27.6 2.2
df.columns = (df.iloc[0] + '_' + df.iloc[1])
df = df.iloc[2:].reset_index(drop=True)
print(df)
# eye-right_location eye-right_location hand_position
# 0 12 27.7 2
# 1 14 27.6 2.2
答案 1 :(得分:1)
我非常喜欢jpp's answer。简短而甜美。非常适合快速分析。
只有一个小问题:生成的DataFrame是通用类型的。因为字符串在前两行中,所以所有列都被视为类型object
。您可以使用info
方法看到这一点。
对于数据分析,通常最好使列具有特定的数字类型。可以用另一行来整理:
df.columns = df.iloc[0] + '_' + df.iloc[1]
df = df.iloc[2:].reset_index(drop=True)
df = df.apply(pd.to_numeric)
此处的第三行将Panda的to_numeric
函数依次应用于每一列,并保留类型更多的DataFrame:
虽然对于简单用法而言不是必需的,但是一旦您开始在DataFrame上执行数学运算或开始使用非常大的数据集,列类型就成为您需要注意的事情。