熊猫:如何添加缺少的标题列

时间:2017-10-03 08:05:37

标签: python pandas csv

你好,我有csv(标签分隔)与标题,我想加载到Python 3.5中的Pandas DataFrame。问题是,缺少某些标头(有数据但没有标题的列 - 如下例所示)。我尝试通过read_csv函数加载它,但如果我不跳过第一行,它将合并第一条数据行以匹配标题数和数据列数。

有什么办法,如何阅读此csv并自动添加缺少的标题?像下面例子中的Header4和Header 5一样?

谢谢

| Header1 | Header2 | Header3 |        |        |
|---------|---------|---------|--------|--------|
| value1  | value2  | value3  | value4 | value5 |
| value1  | value2  | value3  | value4 | value5 |

2 个答案:

答案 0 :(得分:2)

您可以通过dict重新命名后期处理中的列:

print (df)
  Header1 Header2 Header3 Unnamed: 3 Unnamed: 4
0  value1  value2  value3     value4     value5
1  value1  value2  value3     value4     value5


df = df.rename(columns = {'Unnamed: 3':'Header4','Unnamed: 4':'Header5'})
print (df)
  Header1 Header2 Header3 Header4 Header5
0  value1  value2  value3  value4  value5
1  value1  value2  value3  value4  value5

或通过自定义功能:

f = lambda x: 'Header{}'.format(int(x.split()[1])+1) if 'Unnamed' in x else x
df = df.rename(columns = f)
print (df)
  Header1 Header2 Header3 Header4 Header5
0  value1  value2  value3  value4  value5
1  value1  value2  value3  value4  value5

或使用参数namesheadernames并跳过:

df = pd.read_csv('file', names=['Header1','Header2','Header3','Header4','Header5'], header=0)
print (df)
  Header1 Header2 Header3 Header4 Header5
0  value1  value2  value3  value4  value5
1  value1  value2  value3  value4  value5

或者:

df = pd.read_csv('file',
                 names=['Header1','Header2','Header3','Header4','Header5'],
                 skiprows=1)
print (df)
  Header1 Header2 Header3 Header4 Header5
0  value1  value2  value3  value4  value5
1  value1  value2  value3  value4  value5

答案 1 :(得分:0)

您还可以按以下步骤操作:

In [63]: df.columns =df.columns[:3].tolist()  + ['Header4', 'Header5']

In [64]: df
Out[64]: 
    Header1    Header2    Header3    Header4   Header5
0   value1     value2     value3     value4    value5 
1   value1     value2     value3     value4    value5