前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >同质化严重,Pandas和Numpy的若干小技巧

同质化严重,Pandas和Numpy的若干小技巧

作者头像
一个有趣的灵魂W
发布2020-09-15 15:25:52
8730
发布2020-09-15 15:25:52
举报

在Python的数据处理中,频繁用到的两大神器就是Pandas和Numpy了,熟练并花哨的使用这两个库不但能让你的据处理过程缩小代码量还能有效提高数据处理效率。不过随着Python的流行,这类Pandas和Numpy技巧文已经大量同质化,本着为地学而钻研的精神,我整理了我在数据处理过程中常用的几个小技巧。

Pandas类:

在我的数据处理过程中,用到最多的原始数据结构类型便是csv文件,好处简直不要太多啊,比起excel,它的数据量不受限制(具体可以百度),读取之后,以下几个技巧是我必须要注意的:

1、na值,我的数据中缺失的数据通常用‘-‘代替,所以必须把它替换为na值,再转为异常值,进行处理

代码语言:javascript
复制
data2018=pd.read_csv('G:/fjsouthwestdatalist/data2018.csv',sep=',',index_col=0,na_values='-')
data2018=data2018.fillna(999999.000000)

但是当你无法确定数据中的缺失值或者其他属性的时候,通常

代码语言:javascript
复制
data2018.describe()

能帮到你。

2、时间戳

代码语言:javascript
复制
c=pd.to_datetime(b['Date(dd:mm:yyyy)'],format='%d:%m:%Y')
d=c.dt.year#提取其中年份数据

注:通常时间戳需要结合time库一起操作。

3、数据匹配merge(类似于数据库的操作),常用left连接

代码语言:javascript
复制
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、数据删除

代码语言:javascript
复制
删除列
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分组计算

代码语言:javascript
复制
group=df_tables.groupby([df_tables['pointxy'],df_tables['doy']])
b=group.mean()

6、分块读取csv

如果你的数据很大,电脑内存又不够,最好还是使用分块读取

代码语言:javascript
复制
data2018=pd.read_csv('G:/fjsouthwestdatalist/data2018.csv',sep=',',index_col=0,chunksize=10000)

7、数据的交集并集差集(介绍差集)

代码语言:javascript
复制
# 取并集
print("并集:\n%s\n\n" % 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%s\n\n" % df1.drop_duplicates(subset=[‘name‘, ‘age‘, ‘sex‘],keep=False))

Numpy类:

1、和Ps处理流程相似的,我在导入数据时,经常要做一件事就是‘复制背景图层’,需要对数组进行复制处理,此时要注意复制的过程,推荐numpy.copy()函数:

经过copy函数处理之后,能保持原始数据不被干扰(可以参考上一篇文章)。

2、Numpy掩码

代码语言:javascript
复制
>>> 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

关注我们,了解更多

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个有趣的灵魂W 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档