【Python茴香豆系列】之 PANDAS 修改 DataFrame 列名

【Python茴香豆系列】之 PANDAS 修改 DataFrame 列名

用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情。这让我想起鲁迅笔下的孔乙己。孔乙己对于茴香豆的茴字的四种写法颇有研究。我不敢自比孔乙己,这里搜集一些 Python 的茴香豆,以飨各位码农。

首先准备一个函数,用来生成用于测试的 DataFrame 。这个 DataFrame 有 3 列,名称分别为 a 、 b 和 c 。

import pandas as pd
def get_df():
    return pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
get_df()
abc
0147
1258
2369

茴香豆一: columns 属性

有一天, BOSS 说要把 DataFrame 的列名都改为大写。于是我简单粗暴地是把一个 List 丢给了 DataFrame 的 columns 属性,任务完成。示例如下:

df = get_df()
df.columns=['A','B','C']
df
ABC
0147
1258
2369

茴香豆二: columns.str

有一天, BOSS 给我一个有 300 列的 DataFrame ,说要把列名都改为大写。显然,使用上面的方法是浪费生命的。于是我使用了 columns.str 。示例如下:

df = get_df()
df.columns = df.columns.str.upper()
df
ABC
0147
1258
2369

茴香豆三: rename 方法1

有一天, BOSS 给我一个有 300 列的 DataFrame ,说要把列 a 改名为 A ,列 c 改名为 C ,其他列不变。于是我使用了 rename 方法。示例如下:

df = get_df()
df.rename(columns={'a': 'A', 'c': 'C'})
AbC
0147
1258
2369

rename 方法有个 inplace 参数,默认值为 False 。上例中, df 并没有改变。

df
abc
0147
1258
2369

如果要改变的话,需要设置 inplace 为 True 。

df.rename(columns={'a': 'A', 'c': 'C'}, inplace=True)
df
AbC
0147
1258
2369

茴香豆四: rename 方法2

当然,也可以使用函数,例如:

df.rename(columns=lambda x:x.upper())
ABC
0147
1258
2369

茴香豆五: rename 方法3

这里不使用 columns 参数,例如:

df.rename(str.upper, axis=1)
ABC
0147
1258
2369

rename 是一个好东西,详细的用法参见:官方文档
那么使用 rename 有什么好处呢?举个例子吧:

df = get_df()
df.T.rename(columns=lambda x:x+1).T
abc
1147
2258
3369

茴香豆六: 删除再添加

如果在心情特别开心的情况下,我也许可能会考虑:

df = get_df()
for k, v in {'a': 'A','b': 'B', 'c': 'C'}.items():
    df[v] = df.pop(k)
df
ABC
0147
1258
2369
### 回答1: 可以使用rename()方法来修改pandas dataframe列名。具体操作如下: 1. 使用rename()方法,将原列名和新列名以字典形式传入。 例如,将列名A改为B: ``` df.rename(columns={'A': 'B'}, inplace=True) ``` 2. 如果要修改多个列名,可以将多个字典放在一个列表中,然后传入rename()方法。 例如,将列名A改为B,将列名C改为D: ``` df.rename(columns={'A': 'B', 'C': 'D'}, inplace=True) ``` 3. 如果只想修改部分列名,可以使用列索引来选择需要修改的列,然后再使用rename()方法。 例如,将第一列的列名A改为B: ``` df.rename(columns={df.columns[0]: 'B'}, inplace=True) ``` 注意,修改列名时,需要将inplace参数设置为True,才能直接修改dataframe。如果不设置inplace参数或者将其设置为False,则会返回一个新的dataframe,原dataframe不会被修改。 ### 回答2: 在pandas中,可以用rename方法来修改DataFrame列名。下面我会详细介绍如何使用rename方法。 首先,我们可以创建一个简单的DataFrame列名为A和B。 ```python import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame(data) print(df) ``` 这将输出以下内容: ``` A B 0 1 4 1 2 5 2 3 6 ``` 现在,我们想将列A的名称更改为列C。我们可以使用rename方法来实现,方法如下: ```python df = df.rename(columns={'A': 'C'}) print(df) ``` 这将输出以下内容: ``` C B 0 1 4 1 2 5 2 3 6 ``` 我们可以看到,列A已经成功地重命名为了列C。 另外,我们还可以使用rename方法同时重命名多个列。例如,我们想同时将列A和列B的名称更改为列C和列D,我们可以这样做: ```python df = df.rename(columns={'A': 'C', 'B': 'D'}) print(df) ``` 这将输出以下内容: ``` C D 0 1 4 1 2 5 2 3 6 ``` 我们可以看到,列A和列B已经成功地重命名为了列C和列D。 需要说明的是,rename方法返回一个新的数据集,原始数据集不会改变。如果需要在原始数据集上修改列名,可以通过设置inplace参数为True来实现: ```python df.rename(columns={'A': 'C'}, inplace=True) ``` 此时,将直接在原始数据集上修改列名。 总之,使用rename方法可以简单快捷地修改DataFrame列名。只需要通过一个字典,即可将原始列名和新列名一一对应。 ### 回答3: 在Pandas修改DataFrame列名非常简单,只需要使用rename()函数就可以完成。该函数可以接受一个字典参数和一个inplace参数。字典参数是原始列名和新列名的键值对,inplace参数指定是否修改DataFrame还是返回一个新的DataFrame。 例如,我们有以下示例DataFrame: ``` import pandas as pd data = { 'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'gender': ['F', 'M', 'M'] } df = pd.DataFrame(data) ``` 现在我们要将列名'name'改为'full_name',将列名'age'改为'years_old',将列名'gender'改为'sex',可以使用以下代码: ``` df.rename(columns={'name': 'full_name', 'age': 'years_old', 'gender': 'sex'}, inplace=True) ``` 结果会是: ``` full_name years_old sex 0 Alice 25 F 1 Bob 30 M 2 Charlie 35 M ``` 注意第二个参数inplace设置为True,表示直接修改DataFrame,否则该函数返回一个新的DataFrame,而原始DataFrame不会被修改。 除了使用rename()函数,还可以手动修改DataFrame.columns属性,例如: ``` df.columns = ['full_name', 'years_old', 'sex'] ``` 结果相同: ``` full_name years_old sex 0 Alice 25 F 1 Bob 30 M 2 Charlie 35 M ``` 这两种方法是等价的,如果只需修改一两个列名,rename()函数比较方便;如果需要修改多个或所有列名,直接修改columns属性较方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值