如何使用字典键和值重命名 pandas DataFrame 中的列?
Posted
技术标签:
【中文标题】如何使用字典键和值重命名 pandas DataFrame 中的列?【英文标题】:How do I use dictionary keys and values to rename columns in a pandas DataFrame? 【发布时间】:2017-06-06 14:16:45 【问题描述】:我正在构建函数来帮助我从网络加载数据。就加载数据而言,我试图解决的问题是列名因源而异。例如,Yahoo Finance 数据列标题如下所示 Open、High、Low、Close、Volume、Adj Close。 Quandl.com 将拥有包含 DATE、VALUE、date、value 等的数据集。全部大写和小写都会将所有内容以及 Value 和 Adj 排除在外。关闭在很大程度上意味着同样的事情。我想将具有不同名称但含义相同的列与一个值相关联。例如调整。收盘并看好两者 = AC;打开,打开,然后全部打开 = O。
所以我有一个 Csv 文件(“Functions//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 不起作用。这是我得到的输出 print(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。我遗漏了一些东西,任何帮助将不胜感激。
【问题讨论】:
DF.rename
本身并不是 inplace
操作。对于这两种情况,您都需要将这些更改分配回来,例如 - df.rename(..., inplace=True)
。
成功了!!!完美!!
【参考方案1】:
df.rename
工作得很好,但默认情况下它不是就地的。重新分配其返回值或使用inplace=True
。它需要一个字典,其中旧名称作为键,新名称作为值。
df = df.rename(columns = 'col_a': 'COL_A', 'col_b': 'COL_B')
或
df.rename(columns = 'col_a': 'COL_A', 'col_b': 'COL_B', inplace=True)
【讨论】:
我的整体代码是否过于复杂?任何帮助将不胜感激 在 Pandas 0.23.3 版中,DataFrame.rename 的帮助声明“我们强烈建议使用关键字参数来阐明您的意图。”轴的默认值为'index'。对于这个版本,答案应该是:df.rename('col_a': 'COL_A', 'col_b': 'COL_B', axis = 'columns',inplace=True) 另外,由于未知原因,df = df.rename('col_a': 'COL_A', ...)
没有工作,但df = df.rename(columns = 'col_a': 'COL_A', ...)
工作【参考方案2】:
好吧,当你已经有了字典时,将它存储在一个变量中说
DC = '': '', 'Date': 'D', 'High': 'H', 'Open': 'O'
DC 现在可以映射到数据框列,例如
df.columns = df.columns.map(DC)
如果你想使用 rename() 方法,你可以简单地使用
df = df.rename(columns = DC)
【讨论】:
以上是关于如何使用字典键和值重命名 pandas DataFrame 中的列?的主要内容,如果未能解决你的问题,请参考以下文章