import pandas as pd
import numpy as np
'''
一.创建df
1.定义df :传递字典
1.1每一列的名称作为键 每个键都有一个数组作为值【key:数组】
1.2 嵌套字典生成df 一级元素的key作为列名 二级元素的key作为行名
1.3选择需要的创建df pd.DataFrame(dict,columns=['key1','key2'])
1.4指定df的标签(index)pd.DataFrame(dict,columns=['key1','key2'],index = ['one','two',`````])
2.定义df :数据矩阵 + index + columns
2.1 直接传入 值 标签 列名 pd.DataFrame(np.arange(16).reshape(4,4),index=['one','two',....],columns=['object','',..])
二.选取元素
1.取值
1.1查看 【标签 列名 值 】 frame.index frame.columns frame.values
1.2取一列 frame[['object1','object2']] frame.object
1.3取行 frame[1:3]
1.4取单个值 frame['object'][2] df----Series-----索引取值
2.赋值
2.1 给行列标签命名 frame.index,name = 'id' frame.columns.name = 'item'
2.2 添加一列 frame['new'] = 12 翻译为 frame['new'] = [12,12,12,12]
2.3 修改一列 frame['new'] = Series
2.4 修改单个值 df -- 列series -- 索引 frame['new'][2] = 3
3. 判断元素是否在df中
3.1 df = frame.isin([1.0,'pen'])
4.删除列
4.1 del frame['new']
5.筛选
5.1 全部筛选 frame[frame<12]
5.2 筛选某一列 frame[frame.new<12]
6.转置
frame.T
三.index对象
1.确定是否有重复索引 serd.index.is_unique frame.index.is_unique
2.对于重复索引 serd['重复索引'] 返回一个Series frame['重复索引'] 返回Frame
3.Series.reindex([索引数组],method='ffill') frame.reindex([索引数组],method='ffill',columns=['','',....])
4.删除drop() 返回【不包括已删除索引及元素的新对象】 ser.drop(['',''])删除多个索引,要用数组输入
删除行 :Frame.drop(['','',''])
删除列 :Frame.drop(['','',''],axis=1)
5.元素级 数据对其及运算(加)
4.1两个series对象 都有的标签,对应数据相加 只有其中一个对象有的index NaN填充
4.2两个Frame对象 两个frame都有的index 和 columns 对应元素相加 反之用NaN填充
四.数据结构间的运算
1.加减乘除(元素级):【满足广播机制】
a.add(b)
sub()
div()
mul()
五.函数应用和映射【库函数】
1.操作元素的函数(通用函数)
np.sqrt(frame) ##每个元素的平方根
2.按行列操作的函数
f = lambda x:x.max()-x.min()
frame.apply(f) ###按行计算
frame.apply(f,axis=1) ###按列运算
2.1返回多个值
def f(x):
return pd.Series([x.max(),x.min(),],index=['min','max'])
frame.apply(f)
3.统计函数
frame.sum()
frame.mean()
frame.describe()
4.排序
4.1 ser.sort_index()
4.2 ser.sort_index(axis=1)
4.3 frame.sort_index()
4.4 frame.sort_index(axis=1)
4.4 frame.sort_index(by=['columns1','columns2'])
5.排位次 rank
ser.rank()
ser.rank(mothod=''first)
ser.rank(ascending=False)
6.相关性corr() 和 协方差 cov()
7.NaN数据
7.1创建np.NaN pd.series([1,2,3,np.NaN,4],index=[' ',' ',.....])
7.2过滤NaN ser.dropna() ser[ser.notnull()] frame.dropna()行或列有一个有NaN都会被直接删除
frame.dropna(how='all')行列所有元素都为NaN时删除
7.3为NaN填充值
frame.fillna(0) 所有NaN填充0
frame.fillna({'ball':1,'mug':0,'pen':99}) 不同列的NaN替换成不同的值
8.等级索引和分级
8.1 等级索引:
mser = pd.Series(np.random.rand(8),index=[['white','white','white','blue','blue','red','red','red'],
['up','down','right','up','down','up','down','left']])
white up 0.322237
down 0.093246
right 0.181997
blue up 0.887448
down 0.032504
red up 0.612139
down 0.125961
left 0.030511
dtype: float64
print(mser['white'])
print(mser[:,'up'])
dtype: float64
up 0.256720
down 0.849860
right 0.581021
dtype: float64
white 0.256720
blue 0.412591
red 0.893404
dtype: float64
print('选取特定元素:',mser['white','up'])
选取特定元素: 0.9149258487509073
'''
mser = pd.Series(np.random.rand(8),index=[['white','white','white','blue','blue','red','red','red'],
['up','down','right','up','down','up','down','left']])
print(mser)
print(mser['white'])
print(mser[:,'up'])
print('选取特定元素:',mser['white','up'])
a = mser.unstack()
print('转化成df:\n',a)
'''
转化成df:
down left right up
blue 0.241679 NaN NaN 0.025439
red 0.225099 0.410451 NaN 0.180735
white 0.266825 NaN 0.536098 0.900275
'''
print('df转化成series:\n',a.stack())
'''
df转化成series:
blue down 0.241679
up 0.025439
red down 0.225099
left 0.410451
up 0.180735
white down 0.266825
right 0.536098
up 0.900275
dtype: float64
'''
###行列都定义等级索引
mframe = pd.DataFrame(np.random.randn(16).reshape(4,4),
index=[['white','white','red','red'],['up','down','up','down']],
columns=[['pen','pen','paper','paper'],[1,2,1,2]])
print(mframe)
'''
pen paper
1 2 1 2
white up 1.729195 -0.451135 -0.497403 -0.938851
down -1.267124 0.422545 0.069564 -0.735792
red up 0.298684 -0.442771 1.301070 0.234371
down 2.266180 -0.549653 0.108434 -0.394364
'''
###重新调整顺序和为层级排序
mframe.columns.names=['object','id'] ##列名加分类名
mframe.index.names=['colors','status'] ##行名加分类名
print(mframe)
'''
object pen paper
id 1 2 1 2
colors status
white up 0.288562 -0.519511 0.516333 0.643500
down 1.759466 -1.194383 -0.624583 1.027694
red up 0.425757 -1.028554 -0.660548 1.074917
down 0.242714 -0.550235 -0.749478 -0.015347
'''
##调整顺序 colors和status列换位置 swaplevel
print(mframe.swaplevel('colors','status'))
'''
object pen paper
id 1 2 1 2
status colors
up white -0.937241 -1.051002 0.621721 1.227554
down white 0.951904 0.585412 -0.315780 -0.336806
up red -1.824083 0.284429 0.310883 0.031538
down red 0.851415 0.598169 1.967784 -0.421712
'''
'