Pandas字符串处理

网友投稿 762 2022-05-30

Pandas字符串处理

Series.str字符串方法列表参考文档

文章目录

Pandas字符串处理

读取数据

获取Series的str属性,使用各种字符串处理函数

使用str的startswith、contains等得到bool的Series可以做条件查询

需要多次str处理的链式操作

使用正则表达式的处理

Pandas的字符串处理:

使用方法:先获取Series的str属性,然后在属性上调用函数;

只能在字符串列上使用,不能数字列上使用;

Dataframe上没有str属性和处理方法

Series.str并不是Python原生字符串,而是自己的一套方法,不过大部分和原生str很相似;

本节演示内容:

获取Series的str属性,然后使用各种字符串处理函数

使用str的startswith、contains等bool类Series可以做条件查询

需要多次str处理的链式操作

使用正则表达式的处理

读取数据

import pandas as pd

1

df = pd.read_csv("data.xlsx") df.head()

1

2

3

df.dtypes

1

ymd object bWendu object yWendu object tianqi object fengxiang object fengli object aqi int64 aqiInfo object aqiLevel int64 dtype: object

1

2

3

4

5

6

7

8

9

10

获取Series的str属性,使用各种字符串处理函数

df["bWendu"].str

1

1

Pandas中字符串处理

# 字符串替换函数 df["bWendu"].str.replace("℃", "")

1

2

0 3 1 2 2 2 3 0 4 3 .. 360 -5 361 -3 362 -3 363 -2 364 -2 Name: bWendu, Length: 365, dtype: object

1

2

3

4

5

6

7

8

9

10

11

12

# 判断是不是数字 df["bWendu"].str.isnumeric()

1

2

0 False 1 False 2 False 3 False 4 False ... 360 False 361 False 362 False 363 False 364 False Name: bWendu, Length: 365, dtype: bool

1

2

3

4

5

6

7

8

9

10

11

12

df["aqi"].str.len()

1

使用str的startswith、contains等得到bool的Series可以做条件查询

condition = df["ymd"].str.startswith("2018-03")

1

condition

1

0 False 1 False 2 False 3 False 4 False ... 360 False 361 False 362 False 363 False 364 False Name: ymd, Length: 365, dtype: bool

1

2

3

4

5

6

7

8

9

10

11

12

df[condition].head()

1

需要多次str处理的链式操作

怎样提取201803这样的数字月份?

1、先将日期2018-03-31替换成20180331的形式

2、提取月份字符串201803

df["ymd"].str.replace("-", "")

1

0 20180101 1 20180102 2 20180103 3 20180104 4 20180105 ... 360 20181227 361 20181228 362 20181229 363 20181230 364 20181231 Name: ymd, Length: 365, dtype: object

1

2

3

4

5

6

7

8

9

10

11

12

# 每次调用函数,都返回一个新Series df["ymd"].str.replace("-", "").slice(0, 6)

1

2

使用正则表达式的处理

# 添加新列 def get_nianyueri(x): year,month,day = x["ymd"].split("-") return f"{year}年{month}月{day}日" df["中文日期"] = df.apply(get_nianyueri, axis=1)

1

2

3

4

5

df["中文日期"]

1

0 2018年01月01日 1 2018年01月02日 2 2018年01月03日 3 2018年01月04日 4 2018年01月05日 ... 360 2018年12月27日 361 2018年12月28日 362 2018年12月29日 363 2018年12月30日 364 2018年12月31日 Name: 中文日期, Length: 365, dtype: object

1

2

3

4

5

6

7

8

9

10

11

12

问题:怎样将“2018年12月31日”中的年、月、日三个中文字符去除?

# 方法1:链式replace df["中文日期"].str.replace("年", "").str.replace("月","").str.replace("日", "")

1

2

0 20180101 1 20180102 2 20180103 3 20180104 4 20180105 ... 360 20181227 361 20181228 362 20181229 363 20181230 364 20181231 Name: 中文日期, Length: 365, dtype: object

1

2

3

4

5

6

7

8

9

10

11

12

Series.str默认就开启了正则表达式模式

# 方法2:正则表达式替换 df["中文日期"].str.replace("[年月日]", "")

1

2

0 20180101 1 20180102 2 20180103 3 20180104 4 20180105 ... 360 20181227 361 20181228 362 20181229 363 20181230 364 20181231 Name: 中文日期, Length: 365, dtype: object

1

2

3

4

5

6

7

8

9

10

11

12

正则表达式

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅谈Ajax跨域及其JSONP简单实现
下一篇:android使用属性动画代替补间动画
相关文章