从任意行数据中命名pandas列

时间:2015-06-11 20:28:33

标签: python csv pandas

我有一个python脚本,我已经使用pandas读取了csv文件:

colnames = ['col1','col2','col3','col4','col5','col6','col7','col8','col9','col10']
csv_input = pd.read_csv(ifile, names=colnames)

CSV文件中填充了大量不受欢迎的垃圾,但我想使用的列名由col1中DataName的行定义。

csv_names = csv_input[csv_input.col1 == 'DataName']

实际数据在col1中的DataValue行中,我不需要其余的。

csv_input = csv_input[csv_input.col1 == 'DataValue']

我想要做的是使用csv_names的值重命名csv_input中的列,但我找不到正确的语法来执行此操作。我试过了

csv_input.columns = csv_names.values

哪个给出了错误

ValueError: Length mismatch: Expected axis has 10 elements, new values have 1 elements

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

你应该可以像这样直接分配它们:

In [28]:
df = pd.DataFrame({'a':[0,'e',1], 'b':[0,'f',2],'c':[0,'g',2]})
df

Out[28]:
   a  b  c
0  0  0  0
1  e  f  g
2  1  2  2

In [29]:    
df.columns = df.loc[1]
df

Out[29]:
1  e  f  g
0  0  0  0
1  e  f  g
2  1  2  2

所以在你的情况下只做:

csv_input.columns = csv_names