Pandas学习01

Posted xingweikun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas学习01相关的知识,希望对你有一定的参考价值。

一维数组与常用操作

import pandas as pd
import matplotlib.pyplot as plt

# 设置输出结果列对齐
pd.set_option('display.unicode.ambiguous_as_wide',True)
pd.set_option('display.unicode.east_asian_width',True)

# 自动创建从0开始非负整数索引
s1=pd.Series(range(1,20,5))
# 使用字典创建Series,使用字典的“键”作为索引
s2=pd.Series({'语文':90,'数学':92,'Python':98,'物理':87,'化学':92})
# 修改指定索引对应的值
s1[3]=-17
s2['语文']=94

print('s1原始数据'.ljust(20,'='))
print(s1)

print('对s1所有数据求绝对值'.ljust(20,'='))
print(abs(s1))

print('对s1所有数据的值加5'.ljust(20,'='))
print(s1+5)

print('s1的每行索引前面加上数字2'.ljust(20,'='))
print(s1.add_prefix(2))

print('s2原始数据'.ljust(20,'='))
print(s2)

print('s2数据的直方图'.ljust(20,'='))
s2.hist()
plt.show()

print('s2的每行索引后面加上_张三'.ljust(20,'='))
print(s2.add_suffix('_张三'))

print('最大值的索引'.ljust(20,'='))
print(s2.idxmax())

print('测试s2的值是否在指定区间内'.ljust(20,'='))
print(s2.between(90,94,inclusive=True))

print('查看s2中90分以上的数据'.ljust(20,'='))
print(s2[s2>90])

print('查看s2中大于中值的数据'.ljust(20,'='))
print(s2[s2>s2.median()])

print('s2与数字之间的运算'.ljust(20,'='))
print(round((s2**0.5)*10,1))

print('s2的中值'.ljust(20,'='))
print(s2.median())

print('s2中最小的两个值'.ljust(20,'='))
print(s2.nsmallest(2))

# 两个等长Series对象之间可以进行四则运算和幂运算
# 只对两个Series对象中都有的索引对应的值进行计算
# 非共同索引对应的值为空值NaN
print('两个Series对象相加'.ljust(20,'='))
print(pd.Series(range(5))+pd.Series(range(5,10)))

# pipe()方法可以实现函数链式调用的功能
print('每个值的平方对5的余数'.ljust(20,'='))
print(pd.Series(range(5)).pipe(lambda x,y,z:(x**y)%z,2,5))

print('每个值加3之后再乘以3'.ljust(20,'='))
print(pd.Series(range(5)).pipe(lambda x:x+3).pipe(lambda x:x*3))

# apply()方法用来对Series对象的值进行函数运算
print('每个值加3'.ljust(20,'='))
print(pd.Series(range(5)).apply(lambda x:x+3))

print('标准差、无偏方差、无偏标准差'.ljust(20,'='))
print(pd.Series(range(5)).std())
print(pd.Series(range(5)).var())
print(pd.Series(range(5)).sem())

print('查看是否存在等价于True的值'.ljust(20,'='))
print(any(pd.Series([3,0,True])))

print('查看是否所有的值都等价于True'.ljust(20,'='))
print(all(pd.Series([3,0,True])))

运行结果如下:

s1原始数据==============
0     1
1     6
2    11
3   -17
dtype: int64
对s1所有数据求绝对值=========
0     1
1     6
2    11
3    17
dtype: int64
对s1所有数据的值加5=========
0     6
1    11
2    16
3   -12
dtype: int64
s1的每行索引前面加上数字2======
20     1
21     6
22    11
23   -17
dtype: int64
s2原始数据==============
语文      94
数学      92
Python    98
物理      87
化学      92
dtype: int64
s2数据的直方图============

s2的每行索引后面加上_张三======
语文_张三      94
数学_张三      92
Python_张三    98
物理_张三      87
化学_张三      92
dtype: int64
最大值的索引==============
Python
测试s2的值是否在指定区间内======
语文       True
数学       True
Python    False
物理      False
化学       True
dtype: bool
查看s2中90分以上的数据=======
语文      94
数学      92
Python    98
化学      92
dtype: int64
查看s2中大于中值的数据========
语文      94
Python    98
dtype: int64
s2与数字之间的运算==========
语文      97.0
数学      95.9
Python    99.0
物理      93.3
化学      95.9
dtype: float64
s2的中值===============
92.0
s2中最小的两个值===========
物理    87
数学    92
dtype: int64
两个Series对象相加========
0     5
1     7
2     9
3    11
4    13
dtype: int64
每个值的平方对5的余数=========
0    0
1    1
2    4
3    4
4    1
dtype: int64
每个值加3之后再乘以3=========
0     9
1    12
2    15
3    18
4    21
dtype: int64
每个值加3===============
0    3
1    4
2    5
3    6
4    7
dtype: int64
标准差、无偏方差、无偏标准差======
1.5811388300841898
2.5
0.7071067811865476
查看是否存在等价于True的值=====
True
查看是否所有的值都等价于True====
False

时间序列与常用操作

import pandas as pd 

# start指定起始日期,end指定结束日期,periods指定生成的数据数量
# freq指定时间间隔,D表示天,W表示周,H表示小时
# M表示月末最后一天,MS表示月初第一天
# T表示分钟,Y表示年末最后一天,YS表示年初第一天

print('间隔5天'.ljust(30,'='))
print(pd.date_range(start='20200601',end='20200630',freq='5D'))

print('间隔一周'.ljust(30,'='))
print(pd.date_range(start='20200601',end='20200630',freq='W'))

print('间隔2天,5个数据'.ljust(30,'='))
print(pd.date_range(start='20200601',periods=5,freq='2D'))

print('间隔3小时,8个数据'.ljust(30,'='))
print(pd.date_range(start='20200601',periods=8,freq='3H'))

print('3:00开始,间隔一分钟,12个数据'.ljust(30,'='))
print(pd.date_range(start='202006010300',periods=12,freq='T'))

print('间隔1月,月末最后一天'.ljust(30,'='))
print(pd.date_range(start='20200101',end='20201231',freq='M'))

print('间隔1年,6个数据,年末最后一天'.ljust(30,'='))
print(pd.date_range(start='20200101',periods=6,freq='A'))

print('间隔1年,6个数据,年初第一天'.ljust(30,'='))
print(pd.date_range(start='20200101',periods=6,freq='AS'))

# 使用日期时间做索引,创建Series对象
data=pd.Series(index=pd.date_range(start='20200601',periods=24,freq='H'),data=range(24))
print('前5条数据'.ljust(30,'='))
print(data[:5])

print('3小时重采样,计算均值'.ljust(30,'='))
print(data.resample('3H').mean())

print('5小时重采样,求和'.ljust(30,'='))
print(data.resample('5H').sum())

# OHLC分别表示OPEN,HIGH,LOW,CLOSE
print('5小时重采样,统计OHLC值'.ljust(30,'='))
print(data.resample('5H').ohlc())

print('所有日期替换为第二天'.ljust(30,'='))
data.index=data.index+pd.Timedelta('1D')
print(data[:5])

print('查看指定日期是周几'.ljust(30,'='))
print(pd.Timestamp('20200701').day_name())

print('查看指定日期所在年是否为闰年'.ljust(30,'='))
print(pd.Timestamp('201909300800').is_leap_year)

print('查看指定日期所在的季度和月份'.ljust(30,'='))
day=pd.Timestamp('20191025')
print(day.quarter,day.month)

print('转换为Python的日期时间对象'.ljust(30,'='))
print(day.to_pydatetime())

运行结果如下:

间隔5==========================
DatetimeIndex(['2020-06-01', '2020-06-06', '2020-06-11', '2020-06-16',
               '2020-06-21', '2020-06-26'],
              dtype='datetime64[ns]', freq='5D')
间隔一周==========================
DatetimeIndex(['2020-06-07', '2020-06-14', '2020-06-21', '2020-06-28'], dtype='datetime64[ns]', freq='W-SUN')
间隔2天,5个数据=====================
DatetimeIndex(['2020-06-01', '2020-06-03', '2020-06-05', '2020-06-07',
               '2020-06-09'],
              dtype='datetime64[ns]', freq='2D')
间隔3小时,8个数据====================
DatetimeIndex(['2020-06-01 00:00:00', '2020-06-01 03:00:00',
               '2020-06-01 06:00:00', '2020-06-01 09:00:00',
               '2020-06-01 12:00:00', '2020-06-01 15:00:00',
               '2020-06-01 18:00:00', '2020-06-01 21:00:00'],
              dtype='datetime64[ns]', freq='3H')
3:00开始,间隔一分钟,12个数据============
DatetimeIndex(['2020-06-01 03:00:00', '2020-06-01 03:01:00',
               '2020-06-01 03:02:00', '2020-06-01 03:03:00',
               '2020-06-01 03:04:00', '2020-06-01 03:05:00',
               '2020-06-01 03:06:00', '2020-06-01 03:07:00',
               '2020-06-01 03:08:00', '2020-06-01 03:09:00',
               '2020-06-01 03:10:00', '2020-06-01 03:11:00'],
              dtype='datetime64[ns]', freq='T')
间隔1月,月末最后一天===================
DatetimeIndex(['2020-01-31', '2020-02-29', '2020-03-31', '2020-04-30',
               '2020-05-31', '2020-06-30', '2020-07-31', '2020-08-31',
               '2020-09-30', '2020-10-31', '2020-11-30', '2020-12-31'],
              dtype='datetime64[ns]', freq='M')
间隔1年,6个数据,年末最后一天==============
DatetimeIndex(['2020-12-31', '2021-12-31', '2022-12-31', '2023-12-31',
               '2024-12-31', '2025-12-31'],
              dtype='datetime64[ns]', freq='A-DEC')
间隔1年,6个数据,年初第一天============以上是关于Pandas学习01的主要内容,如果未能解决你的问题,请参考以下文章

python pandas multiindex片段

pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”

text [检查特定的数据片段]取自论文但有意思应用。 #python #pandas

Pandas学习01

为啥此代码片段返回意外结果?

pandas的学习2-选择数据