当前位置: 首页 > news >正文

python数据处理与分析入门-pandas使用(4)

往期文章:

  1. pandas使用1
  2. pandas使用2
  3. pandas使用3

pandas使用技巧

创建一个DF对象

# 首先创建一个时间序列
dates = pd.date_range('20180101', periods=6)
print(dates)# 创建DataFrame对象,指定index和columns标签
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
print(df)

布尔型索引使用

# 用一列的值来选择数据
print(df.A > 0)
print("-----------------------------------------------")
# 使用.isin()函数过滤数据
df2 = df.copy()
df2['E'] = ['one', 'one','two','three','four','three']
# 提取df2中'E'值属于['two', 'four']的行
print(df2[df2['E'].isin(['two','four'])])
# 输出
2018-01-01     True
2018-01-02     True
2018-01-03    False
2018-01-04    False
2018-01-05    False
2018-01-06     True
Freq: D, Name: A, dtype: bool
-----------------------------------------------A         B         C         D     E
2018-01-03 -0.737122 -1.018953  1.367684  0.038003   two
2018-01-05 -1.120744 -0.270765 -0.182049 -1.142167  four
# 为DataFrame创建一个新的列,其值为时间顺序(与df相同)的索引值
s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20180101', periods=6))
print(s1)df['F'] = s1# 按标签赋值
df.at[dates[0],'A'] = 0# 按索引赋值
df.iat[0,1] = 0# 用Numpy数组赋值
df.loc[:,'D'] = np.array([5] * len(df))
print("-----------------------------------------------")
# 最终结果
print(df)
# 输出
2018-01-01    1
2018-01-02    2
2018-01-03    3
2018-01-04    4
2018-01-05    5
2018-01-06    6
Freq: D, dtype: int64
-----------------------------------------------A         B         C  D  F
2018-01-01  0.000000  0.000000 -1.688875  5  1
2018-01-02  0.405921  0.596388  0.742552  5  2
2018-01-03 -0.737122 -1.018953  1.367684  5  3
2018-01-04 -0.356770  1.083033  0.876066  5  4
2018-01-05 -1.120744 -0.270765 -0.182049  5  5
2018-01-06  1.279730 -0.662744  0.443358  5  6

缺失数据

Pandas默认使用np.nan来代表缺失数据。Reindexing允许用户对某一轴上的索引改/增/删,并返回数据的副本

# 创建DataFrame对象df1,以dates[0:4]为索引,
# 在df的基础上再加一个新的列'E'(初始均为NaN)
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
print(df1)
print("-----------------------------------------------")
# 将'E'列的前两个行设为1
df1.loc[dates[0]:dates[1],'E'] = 1
print(df1)
# 输出A         B         C  D  F   E
2018-01-01  0.000000  0.000000 -1.688875  5  1 NaN
2018-01-02  0.405921  0.596388  0.742552  5  2 NaN
2018-01-03 -0.737122 -1.018953  1.367684  5  3 NaN
2018-01-04 -0.356770  1.083033  0.876066  5  4 NaN
-----------------------------------------------A         B         C  D  F    E
2018-01-01  0.000000  0.000000 -1.688875  5  1  1.0
2018-01-02  0.405921  0.596388  0.742552  5  2  1.0
2018-01-03 -0.737122 -1.018953  1.367684  5  3  NaN
2018-01-04 -0.356770  1.083033  0.876066  5  4  NaN
# 处理缺失数据
# 剔除df1中含NaN的行(只要任一一列为NaN就算)
df2 = df1.dropna(how='any')
print(df2)
print("--------------------------------------")
# 用5填充df1里的缺失值
df2 = df1.fillna(value=5)
print(df2)
print("--------------------------------------")
# 判断df2中的值是否为缺失数据,返回True/False
print(pd.isnull(df2))
# 输出A         B         C  D  F    E
2018-01-01  0.000000  0.000000 -1.688875  5  1  1.0
2018-01-02  0.405921  0.596388  0.742552  5  2  1.0
--------------------------------------A         B         C  D  F    E
2018-01-01  0.000000  0.000000 -1.688875  5  1  1.0
2018-01-02  0.405921  0.596388  0.742552  5  2  1.0
2018-01-03 -0.737122 -1.018953  1.367684  5  3  5.0
2018-01-04 -0.356770  1.083033  0.876066  5  4  5.0
--------------------------------------A      B      C      D      F      E
2018-01-01  False  False  False  False  False  False
2018-01-02  False  False  False  False  False  False
2018-01-03  False  False  False  False  False  False
2018-01-04  False  False  False  False  False  False
此类操作默认排除缺失数据
# 重新创建一份数据
dates = pd.date_range('20180101', periods=6)
df = pd.DataFrame(np.ones((6,4)), index=dates, columns=list('ABCD'))
s = pd.Series([2,2,2,2,2,2], index=dates)
df['E'] = s
df.head()
# 求平均值
print(df.mean())
print("------")# 一行求平均值
print(df.mean(1))
print("------")# 创建Series对象s,以dates为索引并平移2个位置
s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(2)
print(s)
print("------")# 从df中逐列减去s(若有NaN则得NaN)
print(df.sub(s, axis='index'))# 逐行累加
print(df.apply(np.cumsum))
print("------")# 每列的最大值减最小值
print(df.apply(lambda x: x.max() - x.min()))# 字符
# Series对象的str属性具有一系列字符处理方法,可以很轻松地操作数组的每个元素。
s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
print(s.str.lower())

更多内容请查看我的gittee仓库 : Python基础练习

http://www.lryc.cn/news/350227.html

相关文章:

  • 操作系统-单片机进程状态问题(三态模型问题)
  • Linux文件:重定向底层实现原理(输入重定向、输出重定向、追加重定向)
  • 波搜索算法(WSA)-2024年SCI新算法-公式原理详解与性能测评 Matlab代码免费获取
  • 洛谷P1364 医院设置
  • 哈希表的理解和实现
  • 分治算法(Divide-and-Conquer Algorithm)
  • Java项目:基于ssm框架实现的实验室耗材管理系统(B/S架构+源码+数据库+毕业论文+答辩PPT)
  • 如何通过专业的二手机店erp优化手机商家运营!
  • CentOS常见的命令及其高质量应用
  • nodeJs用ffmpeg直播推流到rtmp服务器上
  • Django信号与扩展:深入理解与实践
  • 使用Docker创建verdaccio私服
  • Spring 使用 Groovy 实现动态server
  • oracle不得不知道的sql
  • 算法-卡尔曼滤波之卡尔曼滤波的第二个方程:预测方程(状态外推方程)
  • 刘邦的创业团队是沛县人,朱元璋的则是凤阳;要创业,一个县人才就够了
  • 【Unity之FairyGUI】你了解FGUI吗,跨平台多功能高效UI插件
  • 基于51单片机的自动浇花器电路
  • 2024中国(重庆)商旅文化川渝美食暨消费品博览会8月举办
  • MacOS docker 安装与配置
  • 【嵌入式大赛应用赛道】机械手臂
  • MES系统主要包括那些功能?
  • git 合并commit
  • 【ARMv8/v9 系统寄存器 5 -- CPU ID 判断寄存器 MPIDR_EL1 使用详细介绍】
  • 软件工程课程设计之酒店管理系统的设计与实现
  • 函数递归练习
  • 公有云Linux模拟TCP三次挥手与四次握手(Wireshark抓包验证版)
  • 【Day3:JAVA运算符、方法的介绍】
  • Chrome查看User Agent的实战教程
  • Linux 第三十四章