命名添加了pandas dataframe的列

时间:2017-05-19 13:06:29

标签: python pandas dataframe

我有以下csv文件,其处理如下

import pandas as pd
df = pd.read_csv('file.csv',   sep=',',header=None)

id                                       ocr    raw_value
00037625-4706-4dfe-a7b3-de8c47e3a28d    A       3
000a7b30-4c4f-4756-a757-f688ccc55d5d    A       /c
000b08e3-4129-4fd2-8ec0-23d00fe38a45    A      yes
00196436-12bc-4024-b623-25bac586d314    A      know
001b8c43-3e73-43c1-ba4f-df5edb10dfac    A      hi
002882ca-48bb-4161-a75a-cf0ec984d650    A      fd
003b2890-3727-4c79-955a-f74ec6945ed7    A     Sensible
004d9025-86f0-4f8c-9720-01e3385c5e77    A      2015

现在我想添加一个新列:

df['val']=None
for img in images:
     id, ext = img.rsplit('.',1)
     idx = df[df[0] ==id].index.values
     df.loc[df.index[idx], 'val'] =  id

当我在新文件中写df时如下:

df.to_csv('new_file.csv', sep=',',encoding='utf-8') 

我注意到该列已正确添加并填充。但该列仍然没有名称,它应该被命名为val

id                                       ocr    raw_value
00037625-4706-4dfe-a7b3-de8c47e3a28d    A       3            4
000a7b30-4c4f-4756-a757-f688ccc55d5d    A       /c           3
000b08e3-4129-4fd2-8ec0-23d00fe38a45    A      yes           1 
00196436-12bc-4024-b623-25bac586d314    A      know          8 
001b8c43-3e73-43c1-ba4f-df5edb10dfac    A      hi            9
002882ca-48bb-4161-a75a-cf0ec984d650    A      fd            10
003b2890-3727-4c79-955a-f74ec6945ed7    A     Sensible       14

如何设置为添加的最后一列?

EDIT1:

print(df.head())

                                     0     1       2           3
0                                   id    ocr  raw_value  manual_raw_value   
1  00037625-4706-4dfe-a7b3-de8c47e3a28d  ABBYY         03                03   
2  000a7b30-4c4f-4756-a757-f688ccc55d5d  ABBYY        y/c               y/c   
3  000b08e3-4129-4fd2-8ec0-23d00fe38a45  ABBYY    armoire           armoire   
4  00196436-12bc-4024-b623-25bac586d314  ABBYY      point             point   

       val  
0      None  
1        93  
2       yic  
3   armoire  
4     point  

3 个答案:

答案 0 :(得分:1)

仅需read_csv,因为默认情况下sep=','可以省略,如果header=None没有标题,则会使用csv

df = pd.read_csv('file.csv')

问题是您的第一行未解析为列名,而是解析为第一行数据。

答案 1 :(得分:0)

df = pd.read_csv('file.csv',   sep=',', header=0, index_col=0)

应该允许你简化下一部分

df['val']=None
for img in images:
     image_id, ext = img.rsplit('.',1)
     df.loc[image_id, 'val'] =  image_id

如果之后不需要image_id作为索引,请使用df.reset_index(inplace=True)

答案 2 :(得分:0)

一个简单的方法...... 在to_csv之前:

df.columns.value[3]="val"