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

时间:2022-07-25
本文章向大家介绍同质化严重,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

关注我们,了解更多