打卡5:Pandas 第四节

#CDA学习打卡 #CDA数据分析师

八、Pandas文本数据

数据准备
#数据准备
import pandas as pd
import numpy as np

data = pd.DataFrame(['a','b','c'],columns=['A'])
data
## 结果
# 	A
# 0	a
# 1	b
# 2	c


data2 = pd.DataFrame(['a-b-c','a-t-b','f-f',np.nan],columns=['A'])
data2['A'].str.repeat(2)
## 结果
# 0    a-b-ca-b-c
# 1    a-t-ba-t-b
# 2        f-ff-f
# 3           NaN
# Name: A, dtype: object


data3 = pd.DataFrame(['q.b ',' aa', ' d f g ',np.nan],columns=['B'])
data3
## 结果
# 	B
# 0	q.b
# 1	aa
# 2	d f g
# 3	NaN

data4 = pd.DataFrame(['a-b-c','a-t-b','f-f',np.nan,' ',123,'aa','AA','Ab'],columns=['A'])
data4
## 结果

# 	A
# 0	a-b-c
# 1	a-t-b
# 2	f-f
# 3	NaN
# 4	
# 5	123
# 6	aa
# 7	AA
# 8	Ab

cat()拼接字符串

①data[‘A’].str.cat([‘A’,‘B’,‘C’],sep=‘,’)
②data[‘A’].str.cat(sep=‘,’)

split()切分字符串

dA’].str.split(‘-’)

get()获取指定位置字符串

data2[‘A’].str.get(2)

join()使用给定字符将字符串拼接

data2[‘A’].str.join(‘~’)

contains()是否包含表达式

①data2[‘A’].str.contains(‘c’)

②data2.fillna(‘0’)[data2.fillna(‘0’)[‘A’].str.contains(‘t’)]

③data2.fillna(‘0’)[data2[‘A’].fillna(‘0’).str.contains(‘t|f’)]

replace()替换

data2[‘A’].str.replace(‘-’,‘&’)

repeat()重复

data2[‘A’].str.repeat(2)

字符串对齐
pad() 左补齐

data2[‘A’].str.pad(10,fillchar=‘0’)

pad() 右补齐

data2[‘A’].str.pad(10,fillchar=‘0’,side=‘right’)

enter() 中间补齐

data2[‘A’].str.center(10,fillchar=‘?’)

ljust() 文本左对齐,补右边

data2[‘A’].str.ljust(10,fillchar=‘?’)

rjust() 文本右对齐,补左边

data2[‘A’].str.rjust(10,fillchar=‘?’)

zfill() 左边补0

data2[‘A’].str.zfill(10)

wrap()指定位置加回车符号

data2[‘A’].str.wrap(3)

slice()指定位置切割字符串

data2[‘A’].str.slice(1,3) #按索引取值,含左不含右

slice_replace()使用给定字符串,替换指定位置字符

data2[‘A’].str.slice_replace(1,3,“?”)

count()计算给定单词出现次数

data2[‘A’].str.count(“a”)

startswith()判断是否以给定字符开头

data2[‘A’].str.startswith(‘a’)

endswith()判断是否以给定字符结尾

data2[‘A’].str.startswith(‘f’)

findall()查找所有符合条件的字符,返回数组

data2[‘A’].str.findall(‘[a-z]’)

match()检测是否匹配给定条件

data2[‘A’].str.match(‘[f-z]’)

extract()提取给定条件的数据

data2[‘A’].str.extract(‘([f-z])’)

len()字符串长度

data2[‘A’].str.len()

去重空白字符串
strip()去除前后空白字符串

data3[‘B’].str.strip()

rstrip()去除后面空白字符串

data3[‘B’].str.rstrip()

lstrip()去除前面空白字符串

data3[‘B’].str.lstrip()

partition()字符串按照首个指定分割字符进行分割,成为数组

data2[‘A’].str.partition(‘-’)

rpartition()字符串按照最后一个指定分割字符进行分割,成为数组

data2[‘A’].str.rpartition(‘-’)

lower()全部小写

data2[‘A’].str.lower()

upper()全部大写

data2[‘A’].str.upper()

find()从左边开始查找,找不到返回-1

data2[‘A’].str.find(‘b’)

rfind()从右边开始查找,找不到返回-1

data2[‘A’].str.rfind(‘b’)

index()从左查找给定字符串位置,找不到报错(substring not found)

data2[‘A’].str.index(‘-’)

rindex()从右查找给定字符串位置,找不到报错

data2[‘A’].str.rindex(‘-’)

capitalize()首字符大写

data2[‘A’].str.capitalize()

swapcase()大小写互换

a = data2[‘A’].str.capitalize()
a.str.swapcase()

isalnum()是否都为数字或字母组成

data4[‘A’].str.isalnum()

isalpha()是否都为字母组成

data4[‘A’].str.isalpha()

isdigit()是否都为数字组成

data4[‘A’].str.isdigit()

isspace()是否空格

data4[‘A’].str.isspace()

islower()是否全部小写

data4[‘A’].str.islower()

isupper()是否全部大写

data4[‘A’].str.isupper()

istitle()是否首字母大写,其他小写

data4[‘A’].str.istitle()

isnumeric()是否都为数字

data4[‘A’].str.isnumeric()

isdecimal()是否都为数字

data4[‘A’].str.isdecimal()

九、Pandas时序数据

创建时间序列数据
# 创建时序
import pandas as pd
from datetime import datetime

# 使用to_datetime
date_range = pd.to_datetime(['2024-04-01','2024-04-02','2024-04-03'])
date_range

## 结果
# DatetimeIndex(['2024-04-01', '2024-04-02', '2024-04-03'], dtype='datetime64[ns]', freq=None)


# 使用pd.date_range
# 参数start-起始日期,end-结束日期,freq-间隔类型,
date_range2 = pd.date_range(start='2024-04-01',end='2024-12-01',freq='M')
date_range2

## 结果
# DatetimeIndex(['2024-04-30', '2024-05-31', '2024-06-30', '2024-07-31',
#                '2024-08-31', '2024-09-30', '2024-10-31', '2024-11-30'],
#               dtype='datetime64[ns]', freq='M')


# 使用datetime模块,创建时间戳
timestamp = pd.Timestamp(year=2024,month=4,day=1,hour=4,minute=15,second=16)
timestamp

## 结果
# Timestamp('2024-04-01 04:15:16')


# 使用datetime模块,创建时间戳2
timestamp2 = datetime(2024,4,1,4,15,16)
print(timestamp2)


## 结果
# 2024-04-01 04:15:16
时长数据计算
# 时间差
start_time = pd.Timestamp('2024-04-01 11:12:15')
end_time = pd.Timestamp('2024-04-03 15:13:15')

time_diff = end_time-start_time
time_diff
## 结果
# Timedelta('2 days 04:01:00')


# 时间加减
pd.Timestamp('2024-04-01 11:12:15')+pd.Timedelta('2 days 12:11:13')
## 结果
# Timestamp('2024-04-03 23:23:28')

时序索引
# 时序索引
# periods为时间序列长度,freq-间隔类型
data = [1,2,3,4,5]
s = pd.date_range('2024-4-1', periods=5, freq='D')
ts = pd.Series(data,index=s)
ts
## 结果
# 2024-04-01    1
# 2024-04-02    2
# 2024-04-03    3
# 2024-04-04    4
# 2024-04-05    5
# Freq: D, dtype: int64

#索引
ts['2024-4-1']
## 结果
# 1

#切片1
ts['2024-4-1':'2024-04-05']
## 结果
# 2024-04-01    1
# 2024-04-02    2
# 2024-04-03    3
# 2024-04-04    4
# 2024-04-05    5
# Freq: D, dtype: int64

#切片2
ts[2:4]
## 结果
# 2024-04-03    3
# 2024-04-04    4
# Freq: D, dtype: int64

# 时间序列重采样
# 'W'表示按周,'M'代表按月,mean()表示平均值
ts.resample('M').mean()
## 结果
# 2024-04-30    3.0
# Freq: M, dtype: float64

# 滚动计算,计算滚动平均值
# window代表窗口大小为3,即计算每3个数据平均值(包含本身往前的3个)
ts.rolling(window=3).mean()
## 结果
# 2024-04-01    NaN
# 2024-04-02    NaN
# 2024-04-03    2.0
# 2024-04-04    3.0
# 2024-04-05    4.0
# Freq: D, dtype: float64

# 时间偏移,将时间序列向前或向后移动
ts.shift(1) #向后
ts.shift(-1) #向前
## 结果(向后)
# 2024-04-01    NaN
# 2024-04-02    1.0
# 2024-04-03    2.0
# 2024-04-04    3.0
# 2024-04-05    4.0
# Freq: D, dtype: float64

## 结果(向前)
# 2024-04-01    2.0
# 2024-04-02    3.0
# 2024-04-03    4.0
# 2024-04-04    5.0
# 2024-04-05    NaN
# Freq: D, dtype: float64
时间访问器dt

查看数据年、月、日、时、分、秒、季度、星期等。

# 时间访问器
tst= pd.Series(pd.date_range('2024-10-1',periods=5,freq='M'))
tst
## 结果
# 0   2024-10-31
# 1   2024-11-30
# 2   2024-12-31
# 3   2025-01-31
# 4   2025-02-28
# dtype: datetime64[ns]

# 提取年份
year = tst.dt.year
year

# 提取月份
month = tst.dt.month
month

# 提取日期
day = tst.dt.day
day

# 提取小时
hour = tst.dt.hour
hour

# 提取分钟
minute = tst.dt.minute
minute

# 提取秒
second = tst.dt.second
second

# 提取季度
quarter = tst.dt.quarter
quarter

# 提取周
week = tst.dt.isocalendar().week
week

# 提取周几
day_name = tst.dt.day_name()
day_name

# 提取一年中的第几天
day_of_year = tst.dt.day_of_year
day_of_year

# 提取一周中的第几天(1为周一7为周日)
day_of_week = tst.dt.dayofweek+1
day_of_week

# 提取一月中的第几天
day_of_month = tst.dt.day
day_of_month

# 提取一月中的最后一天
end_of_month = tst.dt.daysinmonth
end_of_month
时长转化
# 时长转化
import pandas as pd
import numpy as np
from datetime import datetime
ts3= pd.Series(pd.to_timedelta(np.arange(10),unit='m'))
ts3

## 结果
# 0   0 days 00:00:00
# 1   0 days 00:01:00
# 2   0 days 00:02:00
# 3   0 days 00:03:00
# 4   0 days 00:04:00
# 5   0 days 00:05:00
# 6   0 days 00:06:00
# 7   0 days 00:07:00
# 8   0 days 00:08:00
# 9   0 days 00:09:00
# dtype: timedelta64[ns]

# 提取时间戳的秒数
sec = ts3.dt.seconds
sec
## 结果
# 0      0
# 1     60
# 2    120
# 3    180
# 4    240
# 5    300
# 6    360
# 7    420
# 8    480
# 9    540
# dtype: int64

sec2 = ts3.dt.to_pytimedelta()
sec2
## 结果
# array([datetime.timedelta(0), datetime.timedelta(seconds=60),
#        datetime.timedelta(seconds=120), datetime.timedelta(seconds=180),
#        datetime.timedelta(seconds=240), datetime.timedelta(seconds=300),
#        datetime.timedelta(seconds=360), datetime.timedelta(seconds=420),
#        datetime.timedelta(seconds=480), datetime.timedelta(seconds=540)],
#       dtype=object)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值