pandas遗留的操作
pivot:
# 个人理解就是选择1对1个变量,或者1对多个变量进行研究(从以index作为索引的dataframe,作左上角有斜线的一个分析表)
foo bar baz zoo
0 one A 1 x
1 one B 2 y
2 one C 3 z
3 two A 4 q
4 two B 5 w
5 two C 6 t
# pivot,选择新的index和colmns进行分析/出表格
dfp = df.pivot(index='foo', columns=['bar','baz'], values='zoo' )
dfp
# 得到
bar A B C A B C
baz 1 2 3 4 5 6
foo
one x y z NaN NaN NaN
two NaN NaN NaN q w t
# 这时候的colmns是MultiIndex
dfp.columns
# 得到
MultiIndex([('A', 1),
('B', 2),
('C', 3),
('A', 4),
('B', 5),
('C', 6)],
names=['bar', 'baz'])
melt:
# 固定一个量id_vars,观测values_vars的对应值,另一种展示双变量的方法
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
'B': {0: 1, 1: 3, 2: 5},
'C': {0: 2, 1: 4, 2: 6}})
df
# 得到
A B C
0 a 1 2
1 b 3 4
2 c 5 6
# melt
pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
# 得到
A variable value
0 a B 1
1 b B 3
2 c B 5
3 a C 2
4 b C 4
5 c C 6
concat:可以水平拼接和垂直拼接,
# 水平:axis=1
pd.concat([df1,df3],axis=1,join='inner')
# 垂直:axis=0,这里join='inner'代表着如果两个df的columns不一样,拼接后删除所有columns里面有nan的columns,不想删除就不加这个
pd.concat([df1,df3],axis=0,join='inner')
stack
# 和melt很像,也是展示的一种方法,就是把column都移到index里面从index来看数据
multicol2 = pd.MultiIndex.from_tuples([('weight', 'kg'),
('height', 'm')])
df_multi_level_cols2 = pd.DataFrame([[1.0, 2.0], [3.0, 4.0]],
index=['cat', 'dog'],
columns=multicol2)
df_multi_level_cols2
# 得到
weight height
kg m
cat 1.0 2.0
dog 3.0 4.0
# stack
df_multi_level_cols2.stack()
# 这里只移了一层col过去,没一次stack都是移动一层
height weight
cat kg NaN 1.0
m 2.0 NaN
dog kg NaN 3.0
m 4.0 NaN
numpy,scipy相关
1. random相关:
# sample,randint
# 随机数[0,1),可以仍选size
a = np.random.random((3,3))
print(a)
# 随机整数
b = np.random.randint(low=3,high=10,size=(3,3))
print(b)
# 从正态分布里随机--->这里不用tuple!!!
n = np.random.randn(3,3)
print(n)
# 一些简单变换可以随机float在任意区间
k,b = 3,4 # --> [4,7)
any = k*np.random.random((3,3))+b
print(any)
# 从一个一维array里面随机抽样
arr = np.linspace(0,10,10)
print(arr)
sample = np.random.choice(arr,size=10)
print(sample)
# sample函数 ---> 本质和random一样 [0,1)
sam = np.random.sample((3,3))
print(sam)
结果
[[0.37043994 0.12008028 0.00131827]
[0.78523415 0.66069635 0.1164305 ]
[0.83860858 0.42444314 0.13343647]]
[[5 9 4]
[3 8 6]
[5 7 3]]
[[-0.074154 0.76728928 -0.20197347]
[ 0.49179239 -1.24235808 -1.04386071]
[-0.38443735 0.06529597 1.44297735]]
[[6.82208288 4.02348195 5.18859716]
[5.91247924 6.04780045 5.94768461]
[4.84206642 6.93951297 6.0301323 ]]
[ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
6.66666667 7.77777778 8.88888889 10. ]
[4.44444444 6.66666667 0. 4.44444444 3.33333333 3.33333333
1.11111111 2.22222222 3.33333333 1.11111111]
[[0.65146107 0.54263457 0.97589871]
[0.46533061 0.49519949 0.18034651]
[0.69027545 0.51105573 0.25653142]]
# permutation,choice
# 人工实现np.random.choice
arr = np.linspace(0,10,10)
print('arr,',arr)
sample = np.random.choice(arr,size=10)
print('choice:',sample)
rint = np.random.randint(0,10,10)
print(rint)
print('manuell choice:',arr[rint])
结果
arr, [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
6.66666667 7.77777778 8.88888889 10. ]
choice: [ 3.33333333 7.77777778 5.55555556 0. 7.77777778 10.
6.66666667 10. 10. 10. ]
[0 7 2 3 2 4 7 2 0 0]
manuell choice: [0. 7.77777778 2.22222222 3.33333333 2.22222222 4.44444444
7.77777778 2.22222222 0. 0. ]
# shuffle 随机排序
arr2 = np.linspace(0,10,11)
print(arr2)
np.random.shuffle(arr2)
print(arr2)
# permutate 排列组合
print(np.random.permutation(10))
arr3 = np.arange(9).reshape((3,3))
print(np.random.permutation(arr3))
结果
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[ 7. 3. 4. 5. 1. 8. 6. 2. 9. 0. 10.]
[6 5 8 3 4 9 7 0 2 1]
[[3 4 5]
[6 7 8]
[0 1 2]]
2. 新建矩阵相关:eye,zero,random
print(np.eye(3,3))
print(np.zeros((3,3)))
print(np.arange(9).reshape(3,3))
print(np.random.random((3,3)))
print(pd.DataFrame(np.random.random((3,3))))
结果
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
[[0 1 2]
[3 4 5]
[6 7 8]]
[[0.52634137 0.39941736 0.61091552]
[0.25527999 0.577708 0.38547358]
[0.54730596 0.18127438 0.76034667]]
0 1 2
0 0.850191 0.364884 0.679979
1 0.446563 0.336554 0.161733
2 0.334904 0.453234 0.835087
3. distribution相关:
# 分布
bi = np.random.binomial(n=10,p=0.5,size=10)
exp = np.random.exponential(size=10)
f = np.random.f(dfnum=3,dfden=3)
# gamma =
# normal =
# poisson =
# standard_normal =
# 背后伪随机数产生的方法 --> https://zh.wikipedia.org/wiki/%E6%A2%85%E6%A3%AE%E6%97%8B%E8%BD%AC%E7%AE%97%E6%B3%95
scipy.stats---->TODO
联系方式:clarence_wu12@outlook.com