你好,我有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 |
答案 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
或使用参数names
和header
或names
并跳过:
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