同质化严重,Pandas和Numpy的若干小技巧
在Python的数据处理中,频繁用到的两大神器就是Pandas和Numpy了,熟练并花哨的使用这两个库不但能让你的据处理过程缩小代码量还能有效提高数据处理效率。不过随着Python的流行,这类Pandas和Numpy技巧文已经大量同质化,本着为地学而钻研的精神,我整理了我在数据处理过程中常用的几个小技巧。
Pandas类:
在我的数据处理过程中,用到最多的原始数据结构类型便是csv文件,好处简直不要太多啊,比起excel,它的数据量不受限制(具体可以百度),读取之后,以下几个技巧是我必须要注意的:
1、na值,我的数据中缺失的数据通常用‘-‘代替,所以必须把它替换为na值,再转为异常值,进行处理
data2018=pd.read_csv('G:/fjsouthwestdatalist/data2018.csv',sep=',',index_col=0,na_values='-')
data2018=data2018.fillna(999999.000000)
但是当你无法确定数据中的缺失值或者其他属性的时候,通常
data2018.describe()
能帮到你。
2、时间戳
c=pd.to_datetime(b['Date(dd:mm:yyyy)'],format='%d:%m:%Y')
d=c.dt.year#提取其中年份数据
注:通常时间戳需要结合time库一起操作。
3、数据匹配merge(类似于数据库的操作),常用left连接
df1 = pd.DataFrame({'a':['A','B','B','C','D','E'],'b':[1,1,2,3,3,1], 'c':['low','medium','medium','high','low','high']})
df2 = pd.DataFrame({'a':['A','A','B','F'],'h':['apple','orange','pine','pear'], 'g':['high','low','high','medium'],'p':np.array([5,6,5,7])})
# 基于共同列a的左连接
df5 = pd.merge(df1,df2,how='left',on='a')
4、数据删除
删除列
test_dict_df.drop(['id'],axis=1)
批量删除
ak3.drop(ak3.columns[22:], axis=1, inplace=True)
ak3.drop(ak3.columns[[0,2,3,5,6]], axis=1, inplace=True)
同时(多条件删除):
a.drop(a[(a['a']==b['a'][0]) & (a['b']==b['b'][0])].index)
01
5、groupy分组计算
group=df_tables.groupby([df_tables['pointxy'],df_tables['doy']])
b=group.mean()
6、分块读取csv
如果你的数据很大,电脑内存又不够,最好还是使用分块读取
data2018=pd.read_csv('G:/fjsouthwestdatalist/data2018.csv',sep=',',index_col=0,chunksize=10000)
7、数据的交集并集差集(介绍差集)
# 取并集
print("并集:n%snn" % pd.merge(df1,df2,on=[‘name‘, ‘age‘, ‘sex‘], how=‘outer‘))
# 从df1中过滤df1在df2中存在的行,也就是取补集
df1 = df1.append(df2)
df1 = df1.append(df2)
print("补集(从df1中过滤df1在df2中存在的行):n%snn" % df1.drop_duplicates(subset=[‘name‘, ‘age‘, ‘sex‘],keep=False))
Numpy类:
1、和Ps处理流程相似的,我在导入数据时,经常要做一件事就是‘复制背景图层’,需要对数组进行复制处理,此时要注意复制的过程,推荐numpy.copy()函数:
经过copy函数处理之后,能保持原始数据不被干扰(可以参考上一篇文章)。
2、Numpy掩码
>>> a = np.array([[1, 2, 0], [2, 0, 0], [-3, -1, 0]])
>>> b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> a==0 # This is a boolean mask, True where the elements of `a` are zeroarray([[False, False, True], [False, True, True], [False, False, True]])
>>> b[a==0] = 0 # So this is a masked assignment statement
>>> barray([[1, 2, 0], [4, 0, 0], [7, 8, 0]])#实际中,a数组有0 ,用b数组替换
a[a==0]=b[a==0]
Out[15]:
array([[ 1, 2, 3], [ 2, 5, 6], [-3, -1, 9]])
3、判断大小
3、不同维度的数组叠加
这个问题我觉得很有意思,很多个2维数组,想叠在一起,成为一个3维数组,以下是2个2维数组叠加:
但如果是很多个,那就需要先把a,b形状变更为(1,2,3)
4、数组排列
5、数组叠加(关于vstack和column.stac)
b=[3,4,5]a=[1,2,6]c=np.column_stack((a,b))c: array([[1, 3],[2, 4],[6, 5]])c.shape: (3, 2)c=np.vstack([a,b])c.shape: (2, 3)c: array([[1, 2, 6],[3, 4, 5]])
微信号:一个有趣的灵魂W
关注我们,了解更多
- 关于java传参
- 浅析ButterKnife
- SQL Server常用语句
- pyecharts(一):Python可视化利器
- 如何在Python中保存ARIMA时间序列预测模型
- SVN+Apache域用户认证配置方法_Windows(转,重新排版,部分内容更新优化)
- sum(x) over( partition by y ORDER BY z ) 分析
- Android DataBinding 数据绑定
- Flask拾遗笔记之上下文
- switch.....case....使用最容易犯错的地方
- electron 构建跨平台桌面应用
- 两个关于字符串的经典例子
- Android Wear 开发初探
- Android动态布局入门及NinePatchChunk解密
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 科技爱好者周刊(第 127 期):未来人人开发软件,几乎没人编码
- mac快捷键
- 浅谈Kotlin的Checked Exception机制
- 自研网关:特殊URL功能的开发
- centos7多网卡配置
- vuecli3 build之后静态文件出现404
- Muti-Similarity Loss:考虑了batch中整体距离分布的对比损失函数
- AkShare-中国宏观-社会消费品零售总额
- AkShare-中国宏观-存款准备金率
- AkShare-中国宏观-消费者信心指数
- AkShare-期货数据-COMEX库存数据
- ESP8266和ESP32配置(需使用ROS1和ROS2)
- SpringBoot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
- frp 内网穿透远程桌面(Windows 10)配置
- 你来讲讲AQS是什么吧?都是怎么用的?