前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas中字符串处理

Pandas中字符串处理

作者头像
北山啦
发布2022-11-27 11:48:36
2780
发布2022-11-27 11:48:36
举报
文章被收录于专栏:北山啦的博客

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. 使用正则表达式的处理

读取数据

代码语言:javascript
复制
import pandas as pd
代码语言:javascript
复制
df = pd.read_csv("data.xlsx")
df.head()

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

代码语言:javascript
复制
df.dtypes
代码语言:javascript
复制
ymd          object
bWendu       object
yWendu       object
tianqi       object
fengxiang    object
fengli       object
aqi           int64
aqiInfo      object
aqiLevel      int64
dtype: object

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

代码语言:javascript
复制
df["bWendu"].str
代码语言:javascript
复制
<pandas.core.strings.StringMethods at 0x1af21871808>
代码语言:javascript
复制
# 字符串替换函数
df["bWendu"].str.replace("℃", "")
代码语言:javascript
复制
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
代码语言:javascript
复制
# 判断是不是数字
df["bWendu"].str.isnumeric()
代码语言:javascript
复制
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
代码语言:javascript
复制
df["aqi"].str.len()

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

代码语言:javascript
复制
condition = df["ymd"].str.startswith("2018-03")
代码语言:javascript
复制
condition
代码语言:javascript
复制
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
代码语言:javascript
复制
df[condition].head()

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

代码语言:javascript
复制
df["ymd"].str.replace("-", "")
代码语言:javascript
复制
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
代码语言:javascript
复制
# 每次调用函数,都返回一个新Series
df["ymd"].str.replace("-", "").slice(0, 6)

使用正则表达式的处理

代码语言:javascript
复制
# 添加新列
def get_nianyueri(x):
    year,month,day = x["ymd"].split("-")
    return f"{year}年{month}月{day}日"
df["中文日期"] = df.apply(get_nianyueri, axis=1)
代码语言:javascript
复制
df["中文日期"]
代码语言:javascript
复制
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

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

代码语言:javascript
复制
# 方法1:链式replace
df["中文日期"].str.replace("年", "").str.replace("月","").str.replace("日", "")
代码语言:javascript
复制
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

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

代码语言:javascript
复制
# 方法2:正则表达式替换
df["中文日期"].str.replace("[年月日]", "")
代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pandas字符串处理
    • 文章目录
      • 读取数据
        • 获取Series的str属性,使用各种字符串处理函数
          • 使用str的startswith、contains等得到bool的Series可以做条件查询
            • 需要多次str处理的链式操作
              • 使用正则表达式的处理
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档