Pandas中字符串处理

举报
北山啦 发表于 2021/05/26 15:42:00 2021/05/26
【摘要】 Pandas字符串处理 Series.str字符串方法列表参考文档 文章目录 Pandas字符串处理读取数据获取Series的str属性,使用各种字符串处理函数使用str的startswith、contains等得到bool的Series可以做条件查询需要多次str处理的链式操作使用正则表达式的处理 Pandas的字符串处理: ...

Pandas字符串处理

在这里插入图片描述
Series.str字符串方法列表参考文档

Pandas的字符串处理:

  1. 使用方法:先获取Series的str属性,然后在属性上调用函数;
  2. 只能在字符串列上使用,不能数字列上使用;
  3. Dataframe上没有str属性和处理方法
  4. Series.str并不是Python原生字符串,而是自己的一套方法,不过大部分和原生str很相似;

本节演示内容:

  1. 获取Series的str属性,然后使用各种字符串处理函数
  2. 使用str的startswith、contains等bool类Series可以做条件查询
  3. 需要多次str处理的链式操作
  4. 使用正则表达式的处理

读取数据

import pandas as pd

  
 
  • 1

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

  
 
  • 1
  • 2
  • 3
ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
0 2018-01-01 3℃ -6℃ 晴~多云 东北风 1-2级 59 2
1 2018-01-02 2℃ -5℃ 阴~多云 东北风 1-2级 49 1
2 2018-01-03 2℃ -5℃ 多云 北风 1-2级 28 1
3 2018-01-04 0℃ -8℃ 东北风 1-2级 28 1
4 2018-01-05 3℃ -6℃ 多云~晴 西北风 1-2级 50 1
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
<pandas.core.strings.StringMethods at 0x1af21871808>

  
 
  • 1
# 字符串替换函数
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
ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
59 2018-03-01 8℃ -3℃ 多云 西南风 1-2级 46 1
60 2018-03-02 9℃ -1℃ 晴~多云 北风 1-2级 95 2
61 2018-03-03 13℃ 3℃ 多云~阴 北风 1-2级 214 重度污染 5
62 2018-03-04 7℃ -2℃ 阴~多云 东南风 1-2级 144 轻度污染 3
63 2018-03-05 8℃ -3℃ 南风 1-2级 94 2

需要多次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

文章来源: beishan.blog.csdn.net,作者:北山啦,版权归原作者所有,如需转载,请联系作者。

原文链接:beishan.blog.csdn.net/article/details/112755714

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。