为什么列名不会覆盖实际列并在数据框中创建新列?

时间:2016-08-02 21:22:21

标签: pandas dataframe python-3.5

我正在为pandas中的数据框分配列名,但列名称正在创建新列,如何解决此问题?

现在的数据框如下:

                                     abs_subdv_cd  abs_subdv_desc
0  A0001A    ASHTON                              ...             NaN
1  A0002A    J. AYERS                            ...             NaN
2  A0003A    NEWTON ALLSUP                       ...             NaN
3  A0004A    M. AUSTIN                           ...             NaN
4  A0005A    RICHARD W. ALLEN                    ...             NaN

我想要数据框的样子:

 abs_subdv_cd  abs_subdv_desc
0  A0001A    ASHTON                              
1  A0002A    J. AYERS                            
2  A0003A    NEWTON ALLSUP                       
3  A0004A    M. AUSTIN                           
4  A0005A    RICHARD W. ALLEN   
到目前为止

代码:

import pandas as pd

###Declaring path###
path = ('file_path')

###Calling file in folder###
appraisal_abstract_subdv = pd.read_table(path + '/2015-07-28_003820_APPRAISAL_ABSTRACT_SUBDV.txt',
                             encoding = 'iso-8859-1' ,error_bad_lines = False,
                             names = ['abs_subdv_cd','abs_subdv_desc'])
print(appraisal_abstract_subdv.head())

-edit-

当我尝试appraisal_abstract_subdv.shape时...数据框显示为(4000,1)形状,其中数据有两列。

我正在使用的这个数据示例:

A0001A    ASHTON                                  
A0002A    J. AYERS

提前谢谢。

2 个答案:

答案 0 :(得分:2)

您的数据文件看起来有另一个分隔符(不是TAB,它是pd.read_table()的默认分隔符),因此请尝试使用:sep='\s+'delim_whitespace=True参数。

为了在读取数据文件后检查列,请执行以下操作:

print(df.columns.tolist())

答案 1 :(得分:1)

pandas中有一个重命名函数可用于获取列名

df.rename(columns={'OldColumn1': 'Newcolumn1', 'OldColumn2': 'Newcolumn2'}, inplace=True)

然后使用这些列名称使用此方法重新命名它们

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    string str = "1,2,2,3,3,3,4,4";
    char c;
    int num = -1;
    for (int i = 0; i < str.length(); ++i) {
        if (str[i] == ',') continue;
        else {
            c = str[i]; 
            if ((c - '0') != num) {
                num = c - '0';
                cout << num << ",";
            } 
        }
    }
    cout << '\b';
    cout << endl;        
    return 0;
}