pyhton_pandas模块

使用pandas的必要条件

安装必要的模块:
  1. pip install pandas
  2. pip install numpy
其他功能需要的模块
  • pip install xlrd # 读取xls
测试环境ok?
  • 测试pandas的两大结构:Series和DateFrame
1
2
3
4
import pandas as pd
import numpy as np
s = pd.Series([1,3,6,np.nan,44,1])
print(s)
  • 读取excel,方法:
1
2
3
4
5
6
df = pd.read_excel('DHAC.xls')
df1 = pd.read_excel('DHAC.xls', sheet_name='销售单')
df2 = pd.read_excel('DHAC.xls', sheet_name=[1, 2])
data = df.head()
print("获取到所有的值:\n{0}".format(data))
print(df2)

以上都能够正常读取输出则表明功能环境正常了。下面开始操作。

功能概括
1
2
3
4
5
6
7
8
9
10
11
s=pd.Series([1,3,np.nan,56,78]) #创建一个列的表
# 没有指定index,自动生成序列号。
# 没有指定列数,行数,则认为是1列。
--->
0 1.0
1 3.0
2 6.0
3 NaN
4 44.0
5 1.0
dtype: float64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dates = pd.date_range('20160101', periods=6)  # 设置一个日期范围,指定开始日,序列的个数。
df = pd.DataFrame(np.arange(1,25).reshape((6,4)),index=dates,columns=['a', 'b', 'c', 'd'])
print(df)

# DataFrame函数 (value.reshape(),index=[],colums=[])
# reshape函数:
# reshape((6,4)):设置为6行4列。
# reshape(-1,4):设置成4列。行数:-1表示自动计算。也可以只指定行,列数自动计算。
# index函数:制定行的标签或叫行名。用列表赋值,或用变量导入
# columns函数:指定列的标签或叫列名。用列表赋值,或用变量导入
---->
a b c d
2016-01-01 1 2 3 4
2016-01-02 5 6 7 8
2016-01-03 9 10 11 12
2016-01-04 13 14 15 16
2016-01-05 17 18 19 20
2016-01-06 21 22 23 24

操作excel的行和列

1
2
3
4
5
print(df['A']) # 输出列名为A的数据
print(df.A) # 与上同,这是另一种写法

print(df[0:3]) #输出第一到第四列的内容
print(df['20130102':'20130104'])#输出两个行名之间的数据,包括两个行名所在行的数据。
用loc:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
date = pd.date_range('20200101',periods=6)
df = pd.DataFrame(np.arange(1,25).reshape((6,4)),index=date, columns=['A','B','C','D'])
print('生成的表格数据是:\n' ,df)
# 使用标签loc
print('\n输出行名为:20200103 的行数据:\n',df.loc['20200103'].values)
print('\n输出全部行的A、B列的数据:\n',df.loc[:,['A','B']].values)
print('\n输出20200105行的A、B列:\n',df.loc['20200105',['A','B']])
--->
生成的表格数据是:
A B C D
2020-01-01 1 2 3 4
2020-01-02 5 6 7 8
2020-01-03 9 10 11 12
2020-01-04 13 14 15 16
2020-01-05 17 18 19 20
2020-01-06 21 22 23 24

输出行名为:20200103 的行数据:
[ 9 10 11 12]

输出全部行的A、B列的数据:
[[ 1 2]
[ 5 6]
[ 9 10]
[13 14]
[17 18]
[21 22]]

输出20200105行的A、B列:
A 17
B 18
Name: 2020-01-05 00:00:00, dtype: int32
用iloc:有序列功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
date = pd.date_range('20200101',periods=6)
df = pd.DataFrame(np.arange(1,25).reshape((6,4)),index=date, columns=['A','B','C','D'])
print('生成的表格数据是:\n' ,df)
#使用序列
print('\n输出第4行第2列:\n',df.iloc[3,1])
print('\n输出第4~5行的2~3列:\n',df.iloc[3:5,1:3])
print('\n输出第2、4、6行的第2~3列:\n',df.iloc[[1,3,5],1:3])
--->>
生成的表格数据是:
A B C D
2020-01-01 1 2 3 4
2020-01-02 5 6 7 8
2020-01-03 9 10 11 12
2020-01-04 13 14 15 16
2020-01-05 17 18 19 20
2020-01-06 21 22 23 24

输出第4行第2列:
14

输出第45行的23列:
B C
2020-01-04 14 15
2020-01-05 18 19

输出第246行的第23列:
B C
2020-01-02 6 7
2020-01-04 14 15
2020-01-06 22 23

数据筛选功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
date = pd.date_range('20200101',periods=6)
df = pd.DataFrame(np.arange(1,25).reshape((6,4)),index=date, columns=['A','B','C','D'])
print('生成的表格数据是:\n' ,df)
#通过判断的筛选。键值是标签名即列名或行名
print('\n输出列名A,值大于8的行:\n',df[df.A>8])
print('\n输出列名A,值大于8的行:与上表示有别,结果一致\n',df[df.A>8])
--->
生成的表格数据是:
A B C D
2020-01-01 1 2 3 4
2020-01-02 5 6 7 8
2020-01-03 9 10 11 12
2020-01-04 13 14 15 16
2020-01-05 17 18 19 20
2020-01-06 21 22 23 24

输出列名A,值大于8的行:
A B C D
2020-01-03 9 10 11 12
2020-01-04 13 14 15 16
2020-01-05 17 18 19 20
2020-01-06 21 22 23 24

输出列名A,值大于8的行:与上表示有别,结果一致
A B C D
2020-01-03 9 10 11 12
2020-01-04 13 14 15 16
2020-01-05 17 18 19 20
2020-01-06 21 22 23 24
修改值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
date = pd.date_range('20200101',periods=6)
df = pd.DataFrame(np.arange(1,25).reshape((6,4)),index=date, columns=['A','B','C','D'])
print('生成的表格数据是:\n' ,df)
# #修改值
df.iloc[2,2] = 666
print('\n修改后变成:\n',df)
---->>>
生成的表格数据是:
A B C D
2020-01-01 1 2 3 4
2020-01-02 5 6 7 8
2020-01-03 9 10 11 12
2020-01-04 13 14 15 16
2020-01-05 17 18 19 20
2020-01-06 21 22 23 24

修改后变成:
A B C D
2020-01-01 1 2 3 4
2020-01-02 5 6 7 8
2020-01-03 9 10 666 12
2020-01-04 13 14 15 16
2020-01-05 17 18 19 20
2020-01-06 21 22 23 24
添加列

添加列并分别赋值时,应该注意以下几点:

  • 指定的行数必须与原来相同。index
  • 设的值的个数也必须相等。有几行就应该有几个值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
date = pd.date_range('20200101',periods=6)
df = pd.DataFrame(np.arange(1,25).reshape((6,4)),index=date, columns=['A','B','C','D'])
print('生成的表格数据是:\n' ,df)
#添加列
df['F'] =np.nan
print('\n添加列名为F的列,列值都等于NaN\n',df)

df['E'] = pd.Series([15,28,33,45,56,89], index=pd.date_range('20200101',periods=6))
print('\n添加列名为E的列,列值设定的值\n',df)

--->>>
生成的表格数据是:
A B C D
2020-01-01 1 2 3 4
2020-01-02 5 6 7 8
2020-01-03 9 10 11 12
2020-01-04 13 14 15 16
2020-01-05 17 18 19 20
2020-01-06 21 22 23 24

添加列名为F的列,列值都等于NaN
A B C D F
2020-01-01 1 2 3 4 NaN
2020-01-02 5 6 7 8 NaN
2020-01-03 9 10 11 12 NaN
2020-01-04 13 14 15 16 NaN
2020-01-05 17 18 19 20 NaN
2020-01-06 21 22 23 24 NaN

添加列名为E的列,列值设定的值
A B C D F E
2020-01-01 1 2 3 4 NaN 15
2020-01-02 5 6 7 8 NaN 28
2020-01-03 9 10 11 12 NaN 33
2020-01-04 13 14 15 16 NaN 45
2020-01-05 17 18 19 20 NaN 56
2020-01-06 21 22 23 24 NaN 89