问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Pandas 中三个对列转换的小操作

创作时间:
作者:
@小白创作中心

Pandas 中三个对列转换的小操作

引用
1
来源
1.
https://cloud.tencent.com/developer/article/1988986

本文主要介绍三个对列转换的小操作:

  • split:按分隔符将列分割成多个列
  • astype:转换列为其它类型
  • 将对应列上的字符转换为大写或小写

创建 DataFrame

首先,导入 Pandas 模块,通过传入字典的方式创建 DataFrame。

import pandas as pd
mydict = {
    "dev_id": ["001", "002", "003", "004"],
    "name": ["John Hunter", "Lothar Muller", "John Doe", "Elon Brown"],
    "age": [21, 33, 12, 40],
    "salary": [10000, 5000, 12000, 3000],
    "country": ["Gramany", "Germany", "United States", "Scotland"]
}
df_dev = pd.DataFrame(mydict)
df_dev.set_index("dev_id", inplace = True)
df_dev

  • 使用 df_dev 中已经存在的列来创建 df_dev 的索引;
  • "dev_id" 为索引命名;
  • inplace = True 为原地操作,也就是说此次修改不会创建新的对象。

split 按分隔符将列分割成多个列

现在我们想要将 name 列划分成两个列,其中一个列为 first_name,另外一个列为 last_name。比如:John Hunter,他的 first_name 为 John,last_name 为 Hunter。我们可以使用 split 函数来实现上述功能。

df_new = df_dev["name"].str.split(" ", n = 1, expand = True)
df_dev.insert(0, "first_name", df_new[0])
df_dev.insert(1, "last_name", df_new[1])
df_dev.drop(columns = ["name"], inplace = True)
df_dev

  • split 函数是 Series 的操作,全名为 Series.str.split,它可以根据给定的分隔符对 Series 对象进行划分;
  • " " 按照空格划分,我们可以传入字符串或者正则表达式,如果不指定则按照空格进行划分;
  • n = 1 分割数量,如果指定为 None, 0 或 -1 则返回所有分割。比如对于 "I am KangChen.":
  • n = -1,则会返回 I, am, KangChen.
  • n = 1,则会返回 I, am KangChen.
  • n = 2,则会但会 I, am, KangChen.
  • expand = True 将分割的字符串转换为单独的列,指定 True 则返回 DataFrame/MultiIndex,如果指定 False 则返回 Series/Index。

astype 转换列为其它类型

我们可以使用 astype() 将 age 列转换为字符串类型,将 salary 列转换为浮点型。

df_dev['age'] = df_dev['age'].astype(str)
df_dev['salary'] = df_dev['salary'].astype(float)
df_dev

将对应列上的字符转换为大写或小写

df_dev['country'] = df_dev['country'].str.upper()
df_dev

df_dev['country'] = df_dev['country'].str.lower()
df_dev

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号