如何有效地更新熊猫数据框中的列名?

时间:2020-06-12 02:09:16

标签: python pandas

我想重构以下代码:

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()

我该如何解决?这是我试图通过重命名dataframe(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()

3 个答案:

答案 0 :(得分:1)

如何解决列名

  • 用于对所有列名进行相同的更改

使用list comprehension

df.columns = [col.replce(' ', '_') for col in df.columns]

使用str.replace

  • Chris的评论中所述
  • 这是最好的选择
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

答案 1 :(得分:0)

这有效:

labels = list(df.columns)
for i, label in enumerate(labels):
    labels[i] = label.replace(' ', '_')

df.columns = labels

df.head()

答案 2 :(得分:0)

您可以使用listcomprehension代替for。

labels = list(df.columns) labels = [label.replace(' ', '_') for label in labels] df.columns = labels

您的代码中的错误是:

for label in labels:而不是'for range(len(labels))中的标签:`