学习心得
多参考pandas官方:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.values.html,如有的库已经更新了用不了就找到对应库介绍。
Pandas作为Python数据分析的核心包,提供了大量的数据分析函数,包括数据处理、数据抽取、数据集成、数据计算等基本的数据分析手段。Pandas核心数据结构包括序列和数据框,序列储存一维数据,而数据框则可以存储更复杂的多维数据。这里主要介绍二维数据(类似于数据表)及其相关操作。 由于Python是面向对象的语言,序列(ps:序列和numpy的一维数组差不多)和数据框本身是一种数据对象,因此序列和数据框有时也称为序列对象和数据框对象,它们具有自身的属性和方法。
下面主要介绍序列和数据框的创建、相关属性介绍和主要方法的使用,以及数据的访问、切片及运算。在数据读取方面,我们主要介绍了利用Pandas库中的函数读取外部数据文件的方法,包括Excel数据文件和TXT数据文件的读取方法。在函数计算方面,我们主要介绍了几个滚动计算函数,包括移动平均值、移动最大最小值、移动求和等计算。
1.序列操作
"""
Created on Fri Sep 17 09:41:28 2021
@author: 86493
"""
import pandas as pd
import numpy as np
s1 = pd.Series([1, -2, 2.3, 'hq'])
s2 = pd.Series([1, -2, 2.3, 'hq'], index = ['a', 'b', 'c', 'd'])
s3 = pd.Series((1, -2, 2.3, 'hq'))
s4 = pd.Series(np.array([1, 2, 4, 7, 1]))
mydict = {'red':2000, 'blue':1000, 'yellow':500}
ss = pd.Series(mydict)
print(ss)
print(s1)
print(s1[3])
print(s2)
print(s2['c'])
s1 = pd.Series([1, -2, 2.3, 'hq'])
va1 = s1.values
in1 = s1.index
va2 = list(va1)
print(va2)
s5 = [1, 2, 2.3, 'andy', 'liu', 'li', 'andy']
s5 = pd.Series(s5)
s51 = s5.unique()
s52 = s5.isin([1, 'andy'])
print(s52)
s53 = s5.value_counts()
print(s53)
ss1 = pd.Series([10, 'hq', 60, np.nan, 20])
tt1 = ss1[~ss1.isnull()]
print(tt1)
tt2 = ss1[ss1.notnull()]
print(tt2)
tt3 = ss1.dropna()
print(tt3)
import pandas as pd
import numpy as np
s1 = pd.Series([1, -2, 2.3, 'hq'])
s2 = pd.Series([1, -2, 2.3, 'hq'], index = ['a', 'b', 'c', 'd'])
s4 = pd.Series(np.array([1, 2, 4, 7.1]))
s22 = s2[['a', 'd']]
print(s22)
s23 = s1[0:3]
print("s23:\n",s23)
s24 = s1[[0, 2, 3]]
print("s24:\n", s24)
s25 = s4[s4>3]
print("s25:\n",s25)
lst = [i for i in range(1, 11)]
s = pd.Series(lst)
print("s:",s)
su = s.sum()
sm = s.mean()
ss = s.std()
smx = s.max()
smi = s.min()
2.数据框操作
另一个重要的数据对象是数据框,他的属性包括index、列名和值。由于数据框是更为广泛的一种数据组织形式,许多外部数据文件读取到Python中大部分会采用数据框的形式进行存取,比如数据库、excel和TXT文本。
"""
Created on Fri Sep 17 14:17:37 2021
@author: 86493
"""
import pandas as pd
import numpy as np
data = {
'a': [2, 2, np.nan, 5, 6],
'b': ['kl', 'kl', 'kl', np.nan, 'kl'],
'c': [4, 6, 5, np.nan, 6],
'd': [7, 9, np.nan, 9, 8]
}
df = pd.DataFrame(data)
print("初始数据为:\n",df)
print('columns=', df.columns)
print('index=', df.index)
print('values=\n', df.values)
df1 = df.dropna()
print(df1)
df2 = df.fillna(0)
df3 = df.fillna('kl')
df4 = df.fillna({'a':0, 'b':'kl', 'c':0, 'd':0})
df5 = df.fillna({'a':0, 'b':'kl'})
import pandas as pd
data = {'a': [5, 3, 4, 1, 6],
'b': ['d', 'c', 'a', 'e', 'q'],
'c': [4, 6, 5, 5, 6]
}
Df = pd.DataFrame(data)
Df1 = Df.sort_values('a', ascending = False)
Df2 = Df1.sort_index(ascending = False)
H4 = Df2.head(4)
H41 = H4.drop('b', axis = 1)
Df3 = pd.DataFrame({'d': [1, 2, 3, 4, 5]})
Df4 = Df.join(Df3)
import pandas as pd
lst1 = ['a', 'b', 'c', 'd', 'e', 'f']
lst2 = [1, 2, 3, 4, 5, 6]
lst3 = [1.4, 3.5, 2, 6, 7, 8]
lst4 = [4, 5, 6, 7, 8, 9]
lst5 = ['t', 5, 6, 7, 'k', 9.6]
D = {'M1':lst1, 'M2':lst2, 'M3':lst3, 'M4':lst4, 'M5':lst5}
G = {'M1':lst2, 'M2':lst3, 'M3':lst4}
D = pd.DataFrame(D)
D1 = D.values
G = pd.DataFrame(G)
G1 = G.values
D.to_excel('D.xlsx')
G.to_excel('G.xlsx')
Dt = Df4.drop('b', axis = 1)
print(Dt)
R1 = Dt.sum()
R2 = Dt.mean()
R3 = Dt.describe()
print(df2)
c3 = df2.iloc[1:3,2]
c4 = df2.iloc[1:3, 0:2]
c5 = df2.iloc[1:3, :]
c6 = df2.iloc[[0, 2, 3], [1, 2]]
TF = [True, False, False, True, True]
c7 = df2.iloc[TF, [1]]
print("df2:\n",df2)
c8 = df2.loc[df2['b'] == 'kl', :]
print("c8:\n",c8)
c9 = df2.loc[df2['b'] == 'kl', :].head(3)
c10 = df2.loc[df2['b'] == 'kl', ['a', 'c']].head(3)
c11 = df2.loc[df2['b'] == 'kl', ['a', 'c']]
print("c11:\n",c11)
注意iloc (和正常的逻辑一样,先确定行,再确定列位置)和loc 不同——数据框中的loc属性则主要是基于列标签进行索引,即对列值进行筛选实现行定位,再通过指定列,从而实现数据切片操作。如果取所有列,可以用冒号来表示。切片操作获得的数据还可以筛选前N行。
结果为:
初始数据为:
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 NaN kl 5.0 NaN
3 5.0 NaN NaN 9.0
4 6.0 kl 6.0 8.0
columns= Index(['a', 'b', 'c', 'd'], dtype='object')
index= RangeIndex(start=0, stop=5, step=1)
values=
[[2.0 'kl' 4.0 7.0]
[2.0 'kl' 6.0 9.0]
[nan 'kl' 5.0 nan]
[5.0 nan nan 9.0]
[6.0 'kl' 6.0 8.0]]
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
4 6.0 kl 6.0 8.0
a c d
0 5 4 1
1 3 6 2
2 4 5 3
3 1 5 4
4 6 6 5
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 0.0 kl 5.0 0.0
3 5.0 0 0.0 9.0
4 6.0 kl 6.0 8.0
df2:
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 0.0 kl 5.0 0.0
3 5.0 0 0.0 9.0
4 6.0 kl 6.0 8.0
c8:
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 0.0 kl 5.0 0.0
4 6.0 kl 6.0 8.0
c11:
a c
0 2.0 4.0
1 2.0 6.0
2 0.0 5.0
4 6.0 6.0
3.滚动计算函数
滚动计算函数在金融数据处理中应用非常广泛,比如移动平均价、移动平均量等计算。
"""
Created on Fri Sep 17 19:54:46 2021
@author: 86493
"""
import pandas as pd
import numpy as np
L = [i for i in range(1, 15)]
T = (j for j in range(1,15))
A = np.array(L)
S = pd.Series(L)
avg_S = S.rolling(10).mean()
sum_S = S.rolling(10).sum()
min_S = S.rolling(10).min()
max_S = S.rolling(10).max()
4.
|