Python Pandas用顶行替换标题

时间:2015-07-09 21:50:36

标签: python pandas header row

我目前有一个如下所示的数据框:

           Unnamed: 1    Unnamed: 2   Unnamed: 3  Unnamed: 4
0   Sample Number  Group Number  Sample Name  Group Name
1             1.0           1.0          s_1         g_1
2             2.0           1.0          s_2         g_1
3             3.0           1.0          s_3         g_1
4             4.0           2.0          s_4         g_2

我正在寻找一种删除标题行并将第一行作为新标题行的方法,因此新数据框将如下所示:

    Sample Number  Group Number  Sample Name  Group Name
0             1.0           1.0          s_1         g_1
1             2.0           1.0          s_2         g_1
2             3.0           1.0          s_3         g_1
3             4.0           2.0          s_4         g_2

我尝试了if 'Unnamed' in df.columns:的内容,然后创建没有标题df.to_csv(newformat,header=False,index=False)的数据框,但我似乎没有到达任何地方。

9 个答案:

答案 0 :(得分:48)

new_header = df.iloc[0] #grab the first row for the header
df = df[1:] #take the data less the header row
df.columns = new_header #set the header row as the df header

答案 1 :(得分:13)

只需执行

即可更改数据框
df.columns = df.iloc[0]
df = df[1:]

然后

df.to_csv(path, index=False) 

应该做的伎俩。

答案 2 :(得分:8)

如果你想要一个单行,你可以这样做:

df.rename(columns=df.iloc[0]).drop(df.index[0])

答案 3 :(得分:2)

这是一个简单的技巧,用于“就地”定义列索引。因为set_index设置了 row 索引,所以我们可以通过转置数据帧,设置索引并将其转回来对列执行相同的操作:

df = df.T.set_index(0).T

请注意,如果您的行已具有不同的索引,则可能必须更改0中的set_index(0)

答案 4 :(得分:2)

使用Python交换的另一种方式:

df, df.columns = df[1:] , df.iloc[0]

这不会重置索引

尽管如此,相反的情况却无法正常工作df.columns, df = df.iloc[0], df[1:]

答案 5 :(得分:0)

@ostrokach的答案是最好的。您很可能希望在对数据框的所有引用中都保留它,从而可以从inplace = True中受益。
    df.rename(columns=df.iloc[0], inplace = True) df.drop([0], inplace = True)

答案 6 :(得分:0)

-另一种方法


df.columns = df.iloc[0]
df = df.reindex(df.index.drop(0)).reset_index(drop=True)
df.columns.name = None

    Sample Number  Group Number  Sample Name  Group Name
0             1.0           1.0          s_1         g_1
1             2.0           1.0          s_2         g_1
2             3.0           1.0          s_3         g_1
3             4.0           2.0          s_4         g_2

如果喜欢,请按向上箭头。谢谢

答案 7 :(得分:0)

header = table_df.iloc[0]
table_df.drop([0], axis =0, inplace=True)
table_df.reset_index(drop=True)
table_df.columns = header
table_df

答案 8 :(得分:0)

最佳做法和最佳OneLiner

df.to_csv(newformat,header=1)

注意标题值:

标题引用行号作为列名。没错,行号不是df,而是来自excel文件(0是第一行,1是第二行,依此类推)。

这样,您将获得所需的列名,而不必编写其他代码或创建新的df。

好的是,它删除了替换的行。