将熊猫数据框架的行标题转换为列标题,

我要处理的数据有点混乱。.它在其数据中包含头名称。如何从现有的熊猫数据框中选择一行,并将其(重命名为)列标题?

我想这样做:

header = df[df['old_header_name1'] == 'new_header_name1']


df.columns = header
410379 次浏览
In [21]: df = pd.DataFrame([(1,2,3), ('foo','bar','baz'), (4,5,6)])


In [22]: df
Out[22]:
0    1    2
0    1    2    3
1  foo  bar  baz
2    4    5    6

将列标签设置为与第2行(索引位置1)中的值相等:

In [23]: df.columns = df.iloc[1]

如果索引有唯一的标签,可以使用以下方法删除第2行:

In [24]: df.drop(df.index[1])
Out[24]:
1 foo bar baz
0   1   2   3
2   4   5   6

如果索引不是唯一的,您可以使用:

In [133]: df.iloc[pd.RangeIndex(len(df)).drop(1)]
Out[133]:
1 foo bar baz
0   1   2   3
2   4   5   6

使用 df.drop(df.index[1])删除与第二行具有相同标签的 所有行。因为非唯一索引可能导致这样的绊脚石(或潜在的错误) ,所以最好注意索引是唯一的(即使熊猫不需要它)。

这个工作(熊猫 v’0.19.2’) :

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

可以通过表示 翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳header参数在 Read _ csvRead _ html构造函数中指定行索引。这样做的好处是,可以自动删除前面所有被认为是垃圾的行。

import pandas as pd
from io import StringIO


In[1]
csv = '''junk1, junk2, junk3, junk4, junk5
junk1, junk2, junk3, junk4, junk5
pears, apples, lemons, plums, other
40, 50, 61, 72, 85
'''


df = pd.read_csv(StringIO(csv), header=2)
print(df)


Out[1]
pears   apples   lemons   plums   other
0     40       50       61      72      85

重新创建数据框架会更容易。 这还将从头解释列类型。

headers = df.iloc[0]
new_df  = pd.DataFrame(df.values[1:], columns=headers)

在不重新分配 df 的情况下重命名标头:

df.rename(columns=df.iloc[0], inplace = True)

在不重新分配 df 的情况下删除该行:

df.drop(df.index[0], inplace = True)

保持简单,Python

Padas DataFrames 具有 columns属性,为什么不在标准 Python 中使用它呢:

table = [['name', 'Rf', 'Rg', 'Rf,skin', 'CRI'],
['testsala.cxf', '86', '95', '92', '87'],
['testsala.cxf: 727037 lm', '86', '95', '92', '87'],
['630.cxf', '18', '8', '11', '18'],
['Huawei stk-lx1.cxf', '86', '96', '88', '83'],
['dedo uv no filtro.cxf', '52', '93', '48', '58']]


import pandas as pd
data = pd.DataFrame(table[1:],columns=table[0])

或者在这种情况下不是第一行,而是第十行,例如:

columns = table.pop(10)
data = pd.DataFrame(table,columns=columns)