3.5.1 pandas基础

1.导入三方库

import numpy as np
import pandas as pd

查看库的版本

pd.__version__

 

'1.0.5'

 

2.数据文件的导入和导出

1)xlsx文件

shuju_xlsx = pd.read_excel('table.xlsx')
shuju_xlsx2 = pd.read_excel('可视化图表案例数据.xlsx')
shuju_xlsx4 = pd.read_excel('可视化图表案例数据.xlsx',sheet_name='条形图')

2)csv文件

shuju_csv = pd.read_csv('table.csv')

3)txt文件

shuju_txt = pd.read_table('table.txt')
shuju_txt

 

 
.dataframe tbody tr th {
  vertical-align: top;
}

.dataframe thead th {
  text-align: right;
}

</style>

 col1col2col3col4
0 2 a 1.4 apple
1 3 b 3.4 banana
2 6 c 2.5 orange
3 5 d 3.2 lemon

</div>

 

shuju_txt2 = pd.read_table('citydata.txt',sep='\s+')

3.基本数据结构

1)Series 常用的属性有:值(values)、索引(index)、名字(name)、类型(dtype)

se = pd.Series(np.random.randint(60,100,(8)),index=['s','e','q','b','a','s','h','t'],name='模拟学生成绩',dtype='int32')

se

 

s    69
e    96
q    74
b    88
a    66
s    73
h    97
t    64
Name: 模拟学生成绩, dtype: int32

 

se['e']

 

96

 

se['s']

 

s    69
s    73
Name: 模拟学生成绩, dtype: int32

 

2)DataFrame

a)创建DataFrame

DF = pd.DataFrame({'字母':list('abcdefgh'),'编号':range(5,13),'分值':[1.3,1,3.6,4.6,18,9.1,11,11.111]},
                  index=list('一二三四五六七八'))

DF

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 字母编号分值
a 5 1.300
b 6 1.000
c 7 3.600
d 8 4.600
e 9 18.000
f 10 9.100
g 11 11.000
h 12 11.111

</div>

 

b)从DataFrame中取出一列

DF[['编号','分值']]

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 编号分值
5 1.300
6 1.000
7 3.600
8 4.600
9 18.000
10 9.100
11 11.000
12 11.111

</div>

 

c)修改行或列名

修改列名

DF.rename(columns={'asd':'字母','shuzi':'编号','带小数点的数据':'分值'})

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 字母编号分值
a 5 1.300
b 6 1.000
c 7 3.600
d 8 4.600
e 9 18.000
f 10 9.100
g 11 11.000
h 12 11.111

</div>

 

#1.与直接数据提供人或者数据导出者对接
#2.1)让对方自行内部沟通,等待结果;2)尝试获取或切入对方的数据录入环节

修改行名

DF.rename(index={'一':'numberone'},inplace=True)

DF

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 字母编号分值
numberone a 5 1.300
b 6 1.000
c 7 3.600
d 8 4.600
e 9 18.000
f 10 9.100
g 11 11.000
h 12 11.111

</div>

 

d)调用属性和方法

DF.values

 

array([['a', 5, 1.3],
       ['b', 6, 1.0],
       ['c', 7, 3.6],
       ['d', 8, 4.6],
       ['e', 9, 18.0],
       ['f', 10, 9.1],
       ['g', 11, 11.0],
       ['h', 12, 11.111]], dtype=object)

 

DF.index

 

Index(['numberone', '二', '三', '四', '五', '六', '七', '八'], dtype='object')

 

DF.columns

 

Index(['字母', '编号', '分值'], dtype='object')

 

e)列的删除和添加

列的删除

DF.drop(index='五',columns='字母') #使用参数inplace=True才会在DataFrame中生效

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 编号分值
numberone 5 1.300
6 1.000
7 3.600
8 4.600
10 9.100
11 11.000
12 11.111

</div>

 

del DF['字母'] #执行后改动就会生效
DF

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 编号分值
numberone 5 1.300
6 1.000
7 3.600
8 4.600
9 18.000
10 9.100
11 11.000
12 11.111

</div>

 

列的添加

DF

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 编号分值
numberone 5 1.300
6 1.000
7 3.600
8 4.600
9 18.000
10 9.100
11 11.000
12 11.111

</div>

 

DF['添加的列'] = DF['编号'] + DF['分值']
DF

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 编号分值添加的列
numberone 5 1.300 6.300
6 1.000 7.000
7 3.600 10.600
8 4.600 12.600
9 18.000 27.000
10 9.100 19.100
11 11.000 22.000
12 11.111 23.111

</div>

 

f)根据类型选择列

DF.select_dtypes(include=['number'])

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 编号分值添加的列
numberone 5 1.300 6.300
6 1.000 7.000
7 3.600 10.600
8 4.600 12.600
9 18.000 27.000
10 9.100 19.100
11 11.000 22.000
12 11.111 23.111

</div>

 

DF.select_dtypes(include=['object'])

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 
numberone

</div>

 

4.常用基本函数

导入数据文件

csv_shuju = pd.read_csv('table.csv')

a)head和tail

csv_shuju.head()

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 SchoolClassIDGenderAddressHeightWeightMathPhysics
0 S_1 C_1 1101 M street_1 173 63 34.0 A+
1 S_1 C_1 1102 F street_2 192 73 32.5 B+
2 S_1 C_1 1103 M street_2 186 82 87.2 B+
3 S_1 C_1 1104 F street_2 167 81 80.4 B-
4 S_1 C_1 1105 F street_4 159 64 84.8 B+

</div>

 

csv_shuju.rename(columns={'School':'学校','Class':'班级','ID':'学生ID','Gender':'性别',
                          'Address':'地址','Height':'身高','Weight':'体重','Math':'数学成绩','Physics':'物理成绩'},inplace=True)
csv_shuju.head(1) #默认显示5行

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 学校班级学生ID性别地址身高体重数学成绩物理成绩
0 S_1 C_1 1101 M street_1 173 63 34.0 A+

</div>

 

csv_shuju.tail(2) #默认显示5行

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 学校班级学生ID性别地址身高体重数学成绩物理成绩
33 S_2 C_4 2404 F street_2 160 84 67.7 B
34 S_2 C_4 2405 F street_6 193 54 47.6 B

</div>

 

b)unique和nunique

csv_shuju['性别'].nunique() #nunique显示该字段里有多少个唯一值

 

2

 

csv_shuju['性别'].unique() #unique显示该字段里所有的唯一值

 

array(['M', 'F'], dtype=object)

 

c)count和value_counts

csv_shuju['地址'].count() #返回非缺失值元素的个数

 

35

 

csv_shuju['物理成绩'].value_counts() #返回每个元素的频数(有多少个)
#不太适合交易额、销量、分值

 

B+    9
B     8
B-    6
A     4
A-    3
A+    3
C     2
Name: 物理成绩, dtype: int64

 

d)info和describe

csv_shuju.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 35 entries, 0 to 34
Data columns (total 9 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   学校      35 non-null     object 
 1   班级      35 non-null     object 
 2   学生ID    35 non-null     int64  
 3   性别      35 non-null     object 
 4   地址      35 non-null     object 
 5   身高      35 non-null     int64  
 6   体重      35 non-null     int64  
 7   数学成绩    35 non-null     float64
 8   物理成绩    35 non-null     object 
dtypes: float64(1), int64(3), object(5)
memory usage: 2.6+ KB

 

csv_shuju.describe() #统计数值型数据的各个统计量

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 学生ID身高体重数学成绩
count 35.00000 35.000000 35.000000 35.000000
mean 1803.00000 174.142857 74.657143 61.351429
std 536.87741 13.541098 12.895377 19.915164
min 1101.00000 155.000000 53.000000 31.500000
25% 1204.50000 161.000000 63.000000 47.400000
50% 2103.00000 173.000000 74.000000 61.700000
75% 2301.50000 187.500000 82.000000 77.100000
max 2405.00000 195.000000 100.000000 97.000000

</div>

 

csv_shuju.describe(percentiles=[.05,.25,.75,.95])

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 学生ID身高体重数学成绩
count 35.00000 35.000000 35.000000 35.000000
mean 1803.00000 174.142857 74.657143 61.351429
std 536.87741 13.541098 12.895377 19.915164
min 1101.00000 155.000000 53.000000 31.500000
5% 1102.70000 157.000000 56.100000 32.640000
25% 1204.50000 161.000000 63.000000 47.400000
50% 2103.00000 173.000000 74.000000 61.700000
75% 2301.50000 187.500000 82.000000 77.100000
95% 2403.30000 193.300000 97.600000 90.040000
max 2405.00000 195.000000 100.000000 97.000000

</div>

 

csv_shuju['物理成绩'].describe()

 

count     35
unique     7
top       B+
freq       9
Name: 物理成绩, dtype: object

 

e)idxmax和nlargest

idxmax

csv_shuju['数学成绩'].idxmax() #返回最大值所在行的索引

 

5

 

csv_shuju[5:9]

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 学校班级学生ID性别地址身高体重数学成绩物理成绩
5 S_1 C_2 1201 M street_5 188 68 97.0 A-
6 S_1 C_2 1202 F street_4 176 94 63.5 B-
7 S_1 C_2 1203 M street_6 160 53 58.8 A+
8 S_1 C_2 1204 F street_5 162 63 33.8 B

</div>

 

csv_shuju['数学成绩'].idxmin() #返回最小值所在行的索引

 

10

 

csv_shuju[10:20]

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 学校班级学生ID性别地址身高体重数学成绩物理成绩
10 S_1 C_3 1301 M street_4 161 68 31.5 B+
11 S_1 C_3 1302 F street_1 175 57 87.7 A-
12 S_1 C_3 1303 M street_7 188 82 49.7 B
13 S_1 C_3 1304 M street_2 195 70 85.2 A
14 S_1 C_3 1305 F street_5 187 69 61.7 B-
15 S_2 C_1 2101 M street_7 174 84 83.3 C
16 S_2 C_1 2102 F street_6 161 61 50.6 B+
17 S_2 C_1 2103 M street_4 157 61 52.5 B-
18 S_2 C_1 2104 F street_5 159 97 72.2 B+
19 S_2 C_1 2105 M street_4 170 81 34.2 A

</div>

 

nlargest

csv_shuju['数学成绩'].nlargest() #返回前几个大的元素值及其索引

 

5     97.0
28    95.5
11    87.7
2     87.2
24    85.4
Name: 数学成绩, dtype: float64

 

csv_shuju['数学成绩'].nsmallest() #返回前几个小的元素值及其索引

 

10    31.5
1     32.5
26    32.7
8     33.8
0     34.0
Name: 数学成绩, dtype: float64

 

e)clip和replace

clip:对超过或低于指定值的数据进行截取

csv_shuju['数学成绩'].clip(31,50).head()

 

0    34.0
1    32.5
2    50.0
3    50.0
4    50.0
Name: 数学成绩, dtype: float64

 

replace:对指定值进行替换

csv_shuju['地址'].replace(['street_1','street_2','street_4'],['one','two','fouth'],inplace=True)
csv_shuju.head(10)

 

 
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

 学校班级学生ID性别地址身高体重数学成绩物理成绩
0 S_1 C_1 1101 M one 173 63 34.0 A+
1 S_1 C_1 1102 F two 192 73 32.5 B+
2 S_1 C_1 1103 M two 186 82 87.2 B+
3 S_1 C_1 1104 F two 167 81 80.4 B-
4 S_1 C_1 1105 F fouth 159 64 84.8 B+
5 S_1 C_2 1201 M street_5 188 68 97.0 A-
6 S_1 C_2 1202 F fouth 176 94 63.5 B-
7 S_1 C_2 1203 M street_6 160 53 58.8 A+
8 S_1 C_2 1204 F street_5 162 63 33.8 B
9 S_1 C_2 1205 F street_6 167 63 68.4 B-

</div>

 

posted @ 2020-09-20 15:09  小石小石摩西摩西  阅读(217)  评论(0编辑  收藏  举报