pandas

这一块主要用于记录自己利用这段空闲时间,进一步提高自己使用pandas工具的能力,对一些模糊问题进行重新学习及强化。

numpy:处理数值型数据
pandas:还可以处理字符串、时间序列

一、概念问题

二、细节问题

1、pandas的常用数据类型

(1)Series:一维,带标签数组
(2)DataFrame:二维,Series容器

2、Series的用法

1)使用Series创建数组的几种方法

import pandas as pd
# 第一种
a=pd.Series([1,2,3,4,5],index=list('abcde'))

# 第二种
temp_dict={1:'a',2:'b',3:'c',4:'d',5:'e'}
a=pd.Series(temp_dict)

2)更改数组类型

a=pd.Series([1,2,3,4,5])
a.astype('float64')

3)Series切片和索引

tem_dict={'age':30,'name':'xiaohong','tel':10086}
a=pd.Series(tem_dict)
b=a['age']		# 取某个单一的元素
b=a['tel']
b=a[0]
b=a[1]

b=a[[1,2]]		# 取两个元素
b=a[['age','tel']]

a=pd.Series(np.arange(10))
b=a[a>4]		# 布尔索引

Series的索引和值

tem_dict={'age':30,'name':'xiaohong','tel':10086}
a=pd.Series(tem_dict)

print(a.index,type(a.index))	# 类型为Index
print(a.values,type(a.values))	# 类型为numpy.ndarry

Series对象本质上由两个数组组成,一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键 ——>值。

2、DataFrame的用法

df=pd.DataFrame(np.arange(10).reshape((2,5)))
df=pd.DataFrame(np.arange(10).reshape((2,5)),index=list('ab'),columns=list('WXYZU))

DataFrame对象既有行索引,又有列索引。
行索引:表明不同行,横向索引,叫index,0轴,axis=0
列索引:表明不同列,纵向索引,叫columns,1轴,axis=1

1)DataFrame的基础属性

df.shape	# 行数 列数
df.dtypes	# 列数据类型
df.ndim		# 数据维度
df.index 	# 行索引
df.columns	# 列索引
df.values	# 对象值,二维ndarray数组

2)DataFrame的整体情况查询

df.head(3) 	# 显示头部几行,默认5行
df.tail(3) 	# 显示末尾几行,默认5行
df.info() 	# 相关信息概览:行数、列数、列索引、列非空值个数、列类型、内存占用
df.describe() 	# 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值

三、新内容新知识

1、pandas读取文件中的数据

df=pd.read_csv(path)
df=pd.read_excel(path)
df=pd.read_table(path)

df=pd.read_sql(sql_sentence,connection)
df=pd.read_html()
df=pd.read_json()
df=pd.read_pickle(path)

2、DataFrame

DataFrame中排序的方法

df=pd.read_csv(path)
df=df.sort_values(by='姓名',ascending=True)	# 按照姓名那一列进行排序

DataFrame取某一行或者某一列

a=df[:100]	# 取前100行
a=df['姓名']	# 取“姓名”那一列
a=df[:100]['姓名']	# 同时选择行和列

3、pandas中loc和iloc

df.loc:通过标签索引行数据
df.iloc:通过位置获取行数据

df=pd.DataFrame(np.arange(10).reshape((2,5)),index=list('ab'),columns=list('VWXYZ'))

a=df.loc['a','X']					# 取某一个元素
a=df.loc['a']						# 取某一行
a=df.loc[:,'X']						# 取某一列
a=df.loc[['a','b'],['X','Z','W']]	# 取某几行几列

a=df.iloc[0,0]						# 取某一个元素
a=df.iloc[0]							# 取某一行
a=df.iloc[:,0]						# 取某一列
a=df.iloc[[0,1],[12,4]]			# 取某几行几列

a=df[df[:,'X']>3]				# 布尔索引

4、缺失数据的处理方法

判断数据是否为nan:pd.isnull(df)pd.notnull(df)

处理方式1(直接删除):删除nan所在的行和列df.dropna(axis=0,how='any',inplace=False)
处理方式2(填充数据): df.fillna(df.mean())

处理为0 的数据:df[df==0]=np.nan
当然并不是每次为0的数据都需要处理,计算平均值等情况,nan是不会参与计算的,但是0会。

5、数据合并

join:默认情况下,将行索引相同的数据合并到一起

a=pd.DataFrame(np.arange(10).reshape((2,5)),index=list('AB'),columns=list('abcde'))
b=pd.DataFrame(np.arange(12).reshape((3,4)),index=list('ABC'),columns=list('1234'))

'''
a为:
   a  b  c  d  e
A  0  1  2  3  4
B  5  6  7  8  9
******************
b为:
   1  2   3   4
A  0  1   2   3
B  4  5   6   7
C  8  9  10  11
'''
c=a.join(b)
'''
c为:
   a  b  c  d  e  1  2  3  4
A  0  1  2  3  4  0  1  2  3
B  5  6  7  8  9  4  5  6  7
'''
c=b.join(a)
'''
c为:
   1  2   3   4    a    b    c    d    e
A  0  1   2   3  0.0  1.0  2.0  3.0  4.0
B  4  5   6   7  5.0  6.0  7.0  8.0  9.0
C  8  9  10  11  NaN  NaN  NaN  NaN  NaN
'''

merge:按照指定的列把数据按照一定的方式合并到一起。

a=pd.DataFrame(np.arange(10).reshape((2,5)),index=list('AB'),columns=list('abcde'))
b=pd.DataFrame(np.arange(12).reshape((3,4)),index=list('ABC'),columns=list('almn'))
'''
a为:
   a  b  c  d  e
A  0  1  2  3  4
B  5  6  7  8  9
*********************
b为:
   a  l   m   n
A  0  1   2   3
B  4  5   6   7
C  8  9  10  11
'''

1)默认的合并方式为inner,求交集

c=a.merge(b,on='a')
'''
c为:
   a  b  c  d  e  l  m  n
0  0  1  2  3  4  1  2  3
'''
c=b.merge(a,on='a')
'''
   a  l  m  n  b  c  d  e
0  0  1  2  3  1  2  3  4
'''

2)merge 合并方式为outer时,求并集,nan补全

c=a.merge(b,on='a',how='outer')
'''
c为:
   a    b    c    d    e    l     m     n
0  0  1.0  2.0  3.0  4.0  1.0   2.0   3.0
1  5  6.0  7.0  8.0  9.0  NaN   NaN   NaN
2  4  NaN  NaN  NaN  NaN  5.0   6.0   7.0
3  8  NaN  NaN  NaN  NaN  9.0  10.0  11.0
'''
c=b.merge(a,on='a',how='outer')
'''
c为:
   a    l     m     n    b    c    d    e
0  0  1.0   2.0   3.0  1.0  2.0  3.0  4.0
1  4  5.0   6.0   7.0  NaN  NaN  NaN  NaN
2  8  9.0  10.0  11.0  NaN  NaN  NaN  NaN
3  5  NaN   NaN   NaN  6.0  7.0  8.0  9.0
'''

3)merge合并方式为left时,以左边为准,nan补全

c=b.merge(a,on='a',how='left')
'''
c为:
   a  l   m   n    b    c    d    e
0  0  1   2   3  1.0  2.0  3.0  4.0
1  4  5   6   7  NaN  NaN  NaN  NaN
2  8  9  10  11  NaN  NaN  NaN  NaN
'''

4)merge合并方式为right时,以右边为准,nan补全

c=b.merge(a,on='a',how='right')
'''
c为:
   a    l    m    n  b  c  d  e
0  0  1.0  2.0  3.0  1  2  3  4
1  5  NaN  NaN  NaN  6  7  8  9
'''

6、分组和聚合

1)pandas中的分组操作使用df.groupby(by=columns_name)来完成。

grouped=df.groupby(by='columns_name)

groupes是一个DataFrameBy对象,是可迭代的
groupes中的每一个元素是一个元组。元组里面是(索引(分组的值),分组之后的DataFrame)

DataFrameBy对象有很多经过优化的方法:

函数名		说明
count		分组中非NA值的数量
sum			非NA值的和
mean		非NA值的平均值
median		非NA值的算术中位数
std、var	无偏(分母为n-1)标准差和方差
minmax	非NA值的最小值和最大值

参考文献

1、学习视频
2、pandas.Series用法教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值