pandas使用技巧

实习中用到pandas,按需求写一些笔记


1.pandas与excel,csv的对应关系

pandas里面有两个数据结构,一种是series,对应excel的列;一种是dataframe,对应excel的表


2.series类型转换

要时刻意识到series 是一列数据,所以python直接的类型转换 int( ) float()这种函数不能用于转换series

应该用.astype()方法,比如:

 data['age'].astype(float) 

 data['idcard'].astype(str)


3.series是字符串类型时的字符串处理

python平时的字符串处理类似如下:

s='helloworld

s=s[0:5]

但是series类型不能直接这样切片,所以想截取子串的话就要

data['idcard'].str.slice(0,4) 截取身份证前4位


python平时的字符串处理

st='hello world'

st.split(' ')

结果:['hello', 'world']

series切片:

data['contacts'].str.split(',')

比如data['demo']的一行样例是:11.67%,10.15%,数量(远--近)[300,335,369]
比如想取出 11.67

data['first_percent']=data['demo'].str.split(',').str.get(0).str.strip('%')#取出来是str型的,想变成数字再.astype(float)
总之,每次想对series做字符串处理的时候就str一下4.取两列中较小的数
接上文:
data['second_percent']=data['demo'].str.split(',').str.get(1).str.strip('%')#取出来是str型的,想变成数字再.astype(float)
data['max']=np.maximum(data['first_percent'].astype(float),data['second_percent'].astype(float))

4.为什么有的时候赋的列名获取不到?
比如刚刚赋了 data.columns=['score']
data['columns']却报错显示keyError
这时候可以用iloc的方式把该列切出来type()查看类型,可能是Series类型不是pandas类型。
这就可以理解了,因为data.columns是给dataframe赋列名,不能给series赋列名 
5.如何把一个csv的第一行表头读取出来
需求:我有一个csv,700多列,我不想一个一个粘贴复制列名,我想把列名这行读出来弄成一个list或者array,for循环从里面一个一个读,
通过data['列名']遍历每一列数据做一些业务逻辑的操作
datatemp=pd.read_csv('rule_id_192442_v4.csv', sep='\t', encoding='utf-8',header=None,low_memory=False)# low_memory =False为了防止报mixed type
columns_name = datatemp.iloc[0:1,:]#这样切除表头type of columns_name is 
cloumnNameArray=columns_name.values[0]
关键:header=None
6.map函数怎么用
比如把A列做映射,映射成B列,demo如下
# 通话时间分类
a['start_date_cate_w'] = a['date_ago'].map(lambda x: '0-7' if int(x)<=6 else ('8-14' if int(x)>=7 and int(x)<=13 else 'other'))

7.怎么把一列series转换成时间类型
pd.to_datetime()

8.loc vs iloc vs ix,到底有什么区别
http://blog.csdn.net/xw_classmate/article/details/51333646
简单来说:iloc只能通过index(数字)索引
loc可以通过index或名字索引
ix混合索引

9.python的zip函数怎么用

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

>>>a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b) # 打包为元组的列表[(1, 4), (2, 5), (3, 6)]>>> zip(a,c) # 元素个数与最短的列表一致[(1, 4), (2, 5), (3, 6)]>>> zip(*zipped) # 与 zip 相反,可理解为解压,返回二维矩阵式[(1, 2, 3), (4, 5, 6)]





你可能感兴趣的:(python)