Python Pandas用顶行替换标题

Jer*_*y G 35 python row header pandas

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

           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
Run Code Online (Sandbox Code Playgroud)

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

    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
Run Code Online (Sandbox Code Playgroud)

我尝试过的东西if 'Unnamed' in df.columns:然后使数据帧没有标题,df.to_csv(newformat,header=False,index=False)但我似乎没有得到任何地方.

rga*_*lbo 67

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
Run Code Online (Sandbox Code Playgroud)

  • 当我这样做时,0 索引也成为标头的一部分。有没有办法从我的标题行中删除 0 索引? (3认同)

Joe*_*ron 23

只需执行即可更改数据框

df.columns = df.iloc[0]
df = df[1:]
Run Code Online (Sandbox Code Playgroud)

然后

df.to_csv(path, index=False) 
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • 这是一个更好的答案,因为其中没有多余的代码(new_header)。 (2认同)

ost*_*ach 16

如果您需要单线,则可以执行以下操作:

df.rename(columns=df.iloc[0]).drop(df.index[0])
Run Code Online (Sandbox Code Playgroud)

  • 如果您不希望索引丢失某些内容,请将其设为“df.rename(columns=df.iloc[0]).drop(df.index[0]).reset_index(drop=True)”。 (4认同)

Ale*_*ler 7

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

df = df.T.set_index(0).T
Run Code Online (Sandbox Code Playgroud)

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


Ran*_*ara 7

或者,我们可以在使用 pandas 读取文件时执行此操作。

这个案例我们可以使用,

pd.read_csv('file_path',skiprows=1)
Run Code Online (Sandbox Code Playgroud)

读取文件时,这将跳过第一行并将该列设置为文件的第二行。


GoP*_*kGo 5

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


小智 5

另一个使用 Python 交换的单行:

df, df.columns = df[1:] , df.iloc[0]
Run Code Online (Sandbox Code Playgroud)

这不会重置索引

虽然,相反的不会按预期工作 df.columns, df = df.iloc[0], df[1:]