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)
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)
应该做的伎俩.
ost*_*ach 16
如果您需要单线,则可以执行以下操作:
df.rename(columns=df.iloc[0]).drop(df.index[0])
Run Code Online (Sandbox Code Playgroud)
这是一个简单的技巧,可以“就地”定义列索引。因为set_index
设置了行索引,所以我们可以通过转置数据框、设置索引并将其转回来对列执行相同的操作:
df = df.T.set_index(0).T
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的行已经有不同的索引,您可能必须更改0
in 。set_index(0)
或者,我们可以在使用 pandas 读取文件时执行此操作。
这个案例我们可以使用,
pd.read_csv('file_path',skiprows=1)
Run Code Online (Sandbox Code Playgroud)
读取文件时,这将跳过第一行并将该列设置为文件的第二行。
@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:]