如何使用字典键和值重命名pandas DataFrame中的列?

时间:2017-01-21 18:52:25

标签: python pandas dictionary dataframe

我正在构建函数来帮助我从Web加载数据。就加载数据而言,我试图解决的问题是列名称因源而异。例如,Yahoo Finance数据列标题看起来像Open,High,Low,Close,Volume,Adj Close。 Quandl.com将拥有具有DATE,VALUE,日期,值等的数据集。全部大写和小写将所有内容抛出,并且值和调整。大部分关闭意味着同样的事情。我想将具有不同名称但具有相同含义的列关联到一个值。例如Adj。关闭并重视两个= AC;打开,打开,打开全部= O。

所以我有一个Csv文件("函数// ColumnNameChanges.txt"),它存储dict()键和列名值。

Date,D
Open,O
High,H

然后我写了这个函数来填充我的字典

def DictKeyValuesFromText ():

    Dictionary = {}
    TextFileName = "Functions//ColumnNameChanges.txt"
    with open(TextFileName,'r') as f:
        for line in f:
            x = line.find(",")
            y = line.find("/")
            k = line[0:x]
            v = line[x+1:y]

            Dictionary[k] = v
    return Dictionary

这是print(DictKeyValuesFromText())

的输出
{'': '', 'Date': 'D', 'High': 'H', 'Open': 'O'}

下一个功能是我的问题在哪里

def ChangeColumnNames(DataFrameFileLocation):
    x = DictKeyValuesFromText()
    df = pd.read_csv(DataFrameFileLocation)
    for y in df.columns:
        if y not in x.keys():
            i = input("The column " +  y +  " is not in the list, give a name:")
            df.rename(columns={y:i}) 
        else:
            df.rename(columns={y:x[y]})

    return df

df.rename无效。这是我得到的输出(ChangeColumnNames(" Tvix_data.csv"))

The column Low is not in the list, give a name:L
The column Close is not in the list, give a name:C
The column Volume is not in the list, give a name:V
The column Adj Close is not in the list, give a name:AC
            Date        Open        High         Low       Close    Volume  \
0     2010-11-30  106.269997  112.349997  104.389997  112.349997         0
1     2010-12-01   99.979997  100.689997   98.799998  100.689997         0
2     2010-12-02   98.309998   98.309998   86.499998   86.589998         0

列名称应该是D,O,H,L,C,V。我遗漏了任何帮助,我将不胜感激。

2 个答案:

答案 0 :(得分:4)

df.rename工作得很好,但默认情况下它不在位。重新分配其返回值或使用inplace=True。它期望一个字典具有旧名称作为键,新名称作为值。

df = df.rename({'col_a': 'COL_A', 'col_b': 'COL_B'})

df.rename({'col_a': 'COL_A', 'col_b': 'COL_B'}, inplace=True)

答案 1 :(得分:2)

好吧,当您已经将字典存储在变量中时,说

DC = {'': '', 'Date': 'D', 'High': 'H', 'Open': 'O'}

DC现在可以映射到数据框列,例如

df.columns = df.columns.map(DC)

如果您想使用rename()方法,可以简单地使用

df = df.rename(columns = DC)