python - 如何有效地更新熊猫数据框中的列名?
问题描述
我想重构以下代码:
labels = list(df.columns)
labels[0] = labels[0].replace(' ', '_')
labels[1] = labels[1].replace(' ', '_')
labels[2] = labels[2].replace(' ', '_')
labels[3] = labels[3].replace(' ', '_')
labels[5] = labels[5].replace(' ', '_')
labels[6] = labels[6].replace(' ', '_')
df.columns = labels
df.head()
但是,当我在 Jupyter 中运行代码时,我不断收到 ValueError。我想创建整数索引。这就是我将代码重构为:
labels = list(df.columns)
for label in labels:
label = int(label)
labels[label] = labels[label].replace(' ', '_')
df.columns = labels
df.head()
我该如何解决?这是我试图通过重命名数据框(df)以删除空格来实现的示例:
new_df = df.rename(columns={'fixed acidity': 'fixed_acidity',
'volatile acidity': 'volatile_acidity',
'citric acid': 'citric_acid',
'residual sugar': 'residual_sugar',
'free sulfur dioxide': 'free_sulfur_dioxide',
'total sulfur dioxide': 'total_sulfur_dioxide'
})
new_df.head()
解决方案
修复列名的方法
- 对所有列名进行相同的更改
用一个list comprehension
df.columns = [col.replce(' ', '_') for col in df.columns]
利用str.replace
- 正如克里斯在评论中提到的
- 这是最好的选择
df.columns = df.columns.str.replace(" ", "_")
用一个for-loop
- 没必要做
list(df.columns)
- 没有必要使用
enumerate
labels = list()
for col in df.columns:
labels.append(col.replace(' ', '_'))
df.columns = labels
推荐阅读
- javascript - javascript将索引上的循环过滤器转换为函数式编程
- laravel - 如何在 Laravel 迁移中更改默认布尔值
- python - NLTK 的 word_tokenize 与 str.split() 不同的情况有哪些?
- go - Assert interface to slice of struct
- openssl - Adding multiple DNS to CSR with Openssl via command prompt
- r - How can I change the factors to numeric variables or otherwise deal with this error I'm getting in my linear regression
- python - MDSpinner from kivymd doesn't work for me as expected
- php - 查询后如何知道我的变量是否为空(或 null) - laravel
- python - pygame 精灵运动
- oracle-cloud-infrastructure - Resource ownership of GetObjectResponse.InputStream