import pandas as pd
import numpy as np
import matplotlib. pyplot as plt
data = { "grammer" : [ "Python" , "C" , "Java" , "GO" , np. nan, "SQL" , "PHP" , "Python" ] ,
"score" : [ 1 , 2 , np. nan, 4 , 5 , 6 , 7 , 10 ] }
data
{'grammer': ['Python', 'C', 'Java', 'GO', nan, 'SQL', 'PHP', 'Python'],
'score': [1, 2, nan, 4, 5, 6, 7, 10]}
df = pd. DataFrame( data)
df
grammer score 0 Python 1.0 1 C 2.0 2 Java NaN 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
3提取含有字符串"Python"的行
df[ 'grammer' ] == 'Python'
0 True
1 False
2 False
3 False
4 False
5 False
6 False
7 True
Name: grammer, dtype: bool
df[ df[ 'grammer' ] == 'Python' ]
grammer score 0 Python 1.0 7 Python 10.0
df. columns
Index(['grammer', 'score'], dtype='object')
4.修改第二列列名为’popularity’
df. rename( columns= { "score" : "popularity" } , inplace= True )
df
grammer popularity 0 Python 1.0 1 C 2.0 2 Java NaN 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
5.统计grammer列中每种编程语言出现的次数
df[ "grammer" ] . value_counts( )
Python 2
C 1
Java 1
PHP 1
SQL 1
GO 1
Name: grammer, dtype: int64
df1 = df. copy( )
df2 = df. copy( )
df1
grammer popularity 0 Python 1.0 1 C 2.0 2 Java NaN 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
6,将空值用上下值的平均值填充
df1[ 'popularity' ] = df1[ 'popularity' ] . fillna( df1[ 'popularity' ] . interpolate( ) )
df1
grammer popularity 0 Python 1.0 1 C 2.0 2 Java 3.0 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
df2. iloc[ : , 1 ] = df2. iloc[ : , 1 ] . fillna( df2. iloc[ : , 1 ] . interpolate( ) )
df2
grammer popularity 0 Python 1.0 1 C 2.0 2 Java 3.0 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
df
grammer popularity 0 Python 1.0 1 C 2.0 2 Java NaN 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
df[ "popularity" ] . fillna( df[ "popularity" ] . interpolate( ) , inplace= True )
df
grammer popularity 0 Python 1.0 1 C 2.0 2 Java 3.0 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
保留popularity列大于3的值
df[ df. iloc[ : , 1 ] > 3 ]
grammer popularity 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
去除grammar列 重复值
df. drop_duplicates( "grammer" , inplace = True )
df
grammer popularity 0 Python 1.0 1 C 2.0 2 Java 3.0 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0
df[ "popularity" ] . mean( )
4.0
10,将grammer列转换为list
df[ "grammer" ] . to_list( )
['Python', 'C', 'Java', 'GO', nan, 'SQL', 'PHP']
11.将DataFrame保存为EXCEL
df. to_csv( "./test.csv" )
df. to_excel( 'test.xlsx' , index= False )
df[ ( df[ "popularity" ] > 3 ) & ( df[ "popularity" ] < 7 ) ]
grammer popularity 3 GO 4.0 4 NaN 5.0 5 SQL 6.0
14.交换两列位置
cols = df. columns[ [ 1 , 0 ] ]
cols
Index(['popularity', 'grammer'], dtype='object')
cols_1 = df. columns[ [ 0 , 1 ] ]
cols_1
Index(['grammer', 'popularity'], dtype='object')
type ( cols_1)
pandas.core.indexes.base.Index
df = df[ cols]
df
popularity grammer 0 1.0 Python 1 2.0 C 2 3.0 Java 3 4.0 GO 4 5.0 NaN 5 6.0 SQL 6 7.0 PHP
temp = df[ 'popularity' ]
df. drop( labels= [ 'popularity' ] , axis= 1 , inplace = True )
df. insert( 0 , 'popularity' , temp)
df
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\pandas\core\frame.py:4167: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
errors=errors,
popularity grammer 0 1.0 Python 1 2.0 C 2 3.0 Java 3 4.0 GO 4 5.0 NaN 5 6.0 SQL 6 7.0 PHP
15.提取popularity列最大值所在行
df[ "popularity" ] == df[ "popularity" ] . max ( )
0 False
1 False
2 False
3 False
4 False
5 False
6 True
Name: popularity, dtype: bool
df[ df[ "popularity" ] == df[ "popularity" ] . max ( ) ]
16查看最后五行
df. tail( )
popularity grammer 2 3.0 Java 3 4.0 GO 4 5.0 NaN 5 6.0 SQL 6 7.0 PHP
df
popularity grammer 0 1.0 Python 1 2.0 C 2 3.0 Java 3 4.0 GO 4 5.0 NaN 5 6.0 SQL 6 7.0 PHP
17 删掉一行,一列
df. drop( "popularity" , axis= 1 )
grammer 0 Python 1 C 2 Java 3 GO 4 NaN 5 SQL 6 PHP
df. drop( 6 , axis= 0 )
popularity grammer 0 1.0 Python 1 2.0 C 2 3.0 Java 3 4.0 GO 4 5.0 NaN 5 6.0 SQL
18.添加一行数据[‘Perl’,6.6]
df. columns[ [ 1 , 0 ] ]
Index(['grammer', 'popularity'], dtype='object')
df = df[ df. columns[ [ 1 , 0 ] ] ]
df
grammer popularity 0 Python 1.0 1 C 2.0 2 Java 3.0 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0
a = { "grammer" : "perl" , "popularity" : 6.6 }
df. append( a, ignore_index= True )
grammer popularity 0 Python 1.0 1 C 2.0 2 Java 3.0 3 GO 4.0 4 NaN 5.0 5 SQL 6.0 6 PHP 7.0 7 perl 6.6
添加一列数据
a = "grammar"
a
'grammar'
b = df[ "grammer" ]
b
0 Python
1 C
2 Java
3 GO
4 NaN
5 SQL
6 PHP
Name: grammer, dtype: object
df. insert( 0 , a, b)
df
grammar grammer popularity 0 Python Python 1.0 1 C C 2.0 2 Java Java 3.0 3 GO GO 4.0 4 NaN NaN 5.0 5 SQL SQL 6.0 6 PHP PHP 7.0
19.对数据按照"popularity"列值的大小进行排序
df[ "popularity" ] . sort_values( )
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
6 7.0
Name: popularity, dtype: float64
df. sort_values( "popularity" )
grammar grammer popularity 0 Python Python 1.0 1 C C 2.0 2 Java Java 3.0 3 GO GO 4.0 4 NaN NaN 5.0 5 SQL SQL 6.0 6 PHP PHP 7.0
20.统计grammer列每个字符串的长度
df = pd. DataFrame( data)
df[ 'grammer' ] = df[ 'grammer' ] . fillna( 'R' )
df
grammer score 0 Python 1.0 1 C 2.0 2 Java NaN 3 GO 4.0 4 R 5.0 5 SQL 6.0 6 PHP 7.0 7 Python 10.0
df[ 'len_str' ] = df[ 'grammer' ] . map ( lambda x: len ( x) )
df
grammer score len_str 0 Python 1.0 6 1 C 2.0 1 2 Java NaN 4 3 GO 4.0 2 4 R 5.0 1 5 SQL 6.0 3 6 PHP 7.0 3 7 Python 10.0 6
第二期
23 将salary列数据转换为最大值与最小值的平均值
df = pd. read_excel( "./pandas1206855/pandas120.xlsx" )
df. tail( )
createTime education salary 130 2020-03-16 11:36:07 本科 10k-18k 131 2020-03-16 09:54:47 硕士 25k-50k 132 2020-03-16 10:48:32 本科 20k-40k 133 2020-03-16 10:46:31 本科 15k-23k 134 2020-03-16 11:19:38 本科 20k-40k
import re
方法1
lst = df[ 'salary' ] . values
lst[ : 5 ]
array(['20k-35k', '20k-40k', '20k-35k', '13k-20k', '10k-20k'],
dtype=object)
b = lst[ 0 ]
b = str ( b)
b
'20k-35k'
qq = b. split( "-" )
qq[ 0 ] , qq[ 1 ]
('20k', '35k')
qqq = qq[ 0 ] . strip( "k" )
int ( qqq)
20
arr变为list
list_1 = [ i for i in lst]
用“-”分割
qa = [ i. split( "-" ) for i in list_1]
1个列表中嵌套列表,用推导式分开
list_min = [ i[ 0 ] for i in qa]
list_max = [ i[ 1 ] for i in qa]
list_min[ : 5 ] , list_max[ : 5 ]
(['20k', '20k', '20k', '13k', '10k'], ['35k', '40k', '35k', '20k', '20k'])
去掉列表中的k
list_min_1 = [ i. strip( "k" ) for i in list_min]
list_max_1 = [ i. strip( "k" ) for i in list_max]
list_min_1[ : 5 ] , list_max_1[ : 5 ]
(['20', '20', '20', '13', '10'], ['35', '40', '35', '20', '20'])
字符串化为整型
arr_min_2 = np. array( list_min_1, dtype= np. int32)
arr_max_2 = np. array( list_max_1, dtype= np. int32)
arr_min_2[ : 5 ] , arr_max_2[ : 5 ]
(array([20, 20, 20, 13, 10]), array([35, 40, 35, 20, 20]))
求取平均值
salary_1 = ( arr_max_2+ arr_min_2) / 2 * 1000
df[ "salary" ] = salary_1
df. tail( )
createTime education salary 130 2020-03-16 11:36:07 本科 14000.0 131 2020-03-16 09:54:47 硕士 37500.0 132 2020-03-16 10:48:32 本科 30000.0 133 2020-03-16 10:46:31 本科 19000.0 134 2020-03-16 11:19:38 本科 30000.0
方法3:
df = pd. read_excel( "./pandas1206855/pandas120.xlsx" )
for index, row in df. iterrows( ) :
nums = re. findall( '\d+' , row[ 2 ] )
df. iloc[ index, 2 ] = int ( eval ( f'({nums[0]} + {nums[1]}) / 2 * 1000' ) )
df. tail( )
createTime education salary 130 2020-03-16 11:36:07 本科 14000 131 2020-03-16 09:54:47 硕士 37500 132 2020-03-16 10:48:32 本科 30000 133 2020-03-16 10:46:31 本科 19000 134 2020-03-16 11:19:38 本科 30000
方法2
df = pd. read_excel( "./pandas1206855/pandas120.xlsx" )
def func ( df) :
lst = df[ 'salary' ] . split( '-' )
smin = int ( lst[ 0 ] . strip( 'k' ) )
smax = int ( lst[ 1 ] . strip( 'k' ) )
df[ 'salary' ] = int ( ( smin + smax) / 2 * 1000 )
return df
df = df. apply ( func, axis= 1 )
df. tail( )
createTime education salary 130 2020-03-16 11:36:07 本科 14000 131 2020-03-16 09:54:47 硕士 37500 132 2020-03-16 10:48:32 本科 30000 133 2020-03-16 10:46:31 本科 19000 134 2020-03-16 11:19:38 本科 30000
24.将数据根据学历进行分组并计算平均薪资
df. groupby( "education" ) . mean( )
salary education 不限 19600.000000 大专 10000.000000 本科 19361.344538 硕士 20642.857143
25.将createTime列时间转换为月-日
for i in range ( len ( df) ) :
df. iloc[ i, 0 ] = df. iloc[ i, 0 ] . to_pydatetime( ) . strftime( "%m-%d" )
df. head( )
createTime education salary 0 03-16 本科 27500 1 03-16 本科 30000 2 03-16 不限 27500 3 03-16 本科 16500 4 03-16 本科 15000
27.查看数值型列的汇总统计
df. describe( )
salary count 135.000000 mean 19159.259259 std 8661.686922 min 3500.000000 25% 14000.000000 50% 17500.000000 75% 25000.000000 max 45000.000000
28 新增一列根据salary将数据分为三组
bins = [ 0 , 10000 , 20000 , 50000 ]
group_names = [ '低' , '中' , '高' ]
df[ 'categories' ] = pd. cut( df[ 'salary' ] , bins, labels= group_names)
df
createTime education salary categories 0 03-16 本科 27500 高 1 03-16 本科 30000 高 2 03-16 不限 27500 高 3 03-16 本科 16500 中 4 03-16 本科 15000 中 ... ... ... ... ... 130 03-16 本科 14000 中 131 03-16 硕士 37500 高 132 03-16 本科 30000 高 133 03-16 本科 19000 中 134 03-16 本科 30000 高
135 rows × 4 columns
29.按照salary列对数据降序排列
df. sort_values( 'salary' , ascending= False )
createTime education salary categories 53 03-16 本科 45000 高 37 03-16 本科 40000 高 101 03-16 本科 37500 高 16 03-16 本科 37500 高 131 03-16 硕士 37500 高 ... ... ... ... ... 123 03-16 本科 4500 低 126 03-16 本科 4000 低 110 03-16 本科 4000 低 96 03-16 不限 3500 低 113 03-16 本科 3500 低
135 rows × 4 columns
30.取出第30行
df. iloc[ 32 ]
createTime 03-16
education 硕士
salary 22500
categories 高
Name: 32, dtype: object
31 计算salary列的中位数
np. median( df[ "salary" ] )
17500.0
32.绘制薪资水平频率分布直方图
df. salary. plot( kind= 'hist' )
plt. show( )
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mC61mIJO-1606139752537)(output_117_0.png)]
33.绘制薪资水平密度曲线
df. salary. plot( kind= 'kde' , xlim= ( 0 , 80000 ) )
plt. show( )
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mZjj1pqp-1606139752538)(output_119_0.png)]
34.删除最后一列categories
axis:使用0值表示沿着每一列或行标签\索引值向下执行方法,使用1值表示沿着每一行或者列标签模向执行对应的方法
df. drop( columns= [ "categories" ] )
createTime education salary 0 03-16 本科 27500 1 03-16 本科 30000 2 03-16 不限 27500 3 03-16 本科 16500 4 03-16 本科 15000 ... ... ... ... 130 03-16 本科 14000 131 03-16 硕士 37500 132 03-16 本科 30000 133 03-16 本科 19000 134 03-16 本科 30000
135 rows × 3 columns
df.drop(labels=“categories”,axis=1)
35.将df的第一列与第二列合并为新的一列
df[ "test" ] = df[ "education" ] + df[ "createTime" ]
df. tail( )
createTime education salary categories test 130 03-16 本科 14000 中 本科03-16 131 03-16 硕士 37500 高 硕士03-16 132 03-16 本科 30000 高 本科03-16 133 03-16 本科 19000 中 本科03-16 134 03-16 本科 30000 高 本科03-16
df. columns
Index(['createTime', 'education', 'salary', 'categories', 'test'], dtype='object')
df. columns[ [ ] ]
Index([], dtype='object')
df. columns[ [ 4 , 0 , 1 , 2 , 3 ] ]
Index(['test', 'createTime', 'education', 'salary', 'categories'], dtype='object')
df[ df. columns[ [ 4 , 0 , 1 , 2 , 3 ] ] ] . tail( )
test createTime education salary categories 130 本科03-16 03-16 本科 14000 中 131 硕士03-16 03-16 硕士 37500 高 132 本科03-16 03-16 本科 30000 高 133 本科03-16 03-16 本科 19000 中 134 本科03-16 03-16 本科 30000 高
36.将education列与salary列合并为新的一列
df[ "test_1" ] = str ( df[ "salary" ] ) + df[ "education" ]
df. tail( )
createTime education salary categories test test_1 130 03-16 本科 14000 中 本科03-16 0 27500\n1 30000\n2 27500\n3 ... 131 03-16 硕士 37500 高 硕士03-16 0 27500\n1 30000\n2 27500\n3 ... 132 03-16 本科 30000 高 本科03-16 0 27500\n1 30000\n2 27500\n3 ... 133 03-16 本科 19000 中 本科03-16 0 27500\n1 30000\n2 27500\n3 ... 134 03-16 本科 30000 高 本科03-16 0 27500\n1 30000\n2 27500\n3 ...
df[ "test_1" ] = df[ "salary" ] . map ( str ) + df[ "education" ]
df. tail( )
createTime education salary categories test test_1 130 03-16 本科 14000 中 本科03-16 14000本科 131 03-16 硕士 37500 高 硕士03-16 37500硕士 132 03-16 本科 30000 高 本科03-16 30000本科 133 03-16 本科 19000 中 本科03-16 19000本科 134 03-16 本科 30000 高 本科03-16 30000本科
37.计算salary最大值与最小值之差
df[‘name’]#得到的是不包含列索引的Series结构 df[[‘name’]]#得到是包含列索引的DataFrame结构 df.name#得到是不包含列索引的Series结构
df[ [ "salary" ] ] . tail( )
salary 130 14000 131 37500 132 30000 133 19000 134 30000
df[ "salary" ] . tail( )
130 14000
131 37500
132 30000
133 19000
134 30000
Name: salary, dtype: int64
df. salary. tail( )
130 14000
131 37500
132 30000
133 19000
134 30000
Name: salary, dtype: int64
df[ [ "salary" ] ] . apply ( lambda x : x. max ( ) - x. min ( ) )
salary 41500
dtype: int64
38.将第一行与最后一行拼接
pd. concat( [ df[ : 1 ] , df[ - 2 : - 1 ] ] )
createTime education salary categories test test_1 0 03-16 本科 27500 高 本科03-16 27500本科 133 03-16 本科 19000 中 本科03-16 19000本科
39.将第8行数据添加至末尾
df[ 8 : 9 ]
createTime education salary categories test test_1 8 03-16 不限 7000 低 不限03-16 7000不限
df. iloc[ 8 , : ]
createTime 03-16
education 不限
salary 7000
categories 低
test 不限03-16
test_1 7000不限
Name: 8, dtype: object
df. iloc[ : , [ 2 , 4 ] ]
salary test 0 27500 本科03-16 1 30000 本科03-16 2 27500 不限03-16 3 16500 本科03-16 4 15000 本科03-16 ... ... ... 130 14000 本科03-16 131 37500 硕士03-16 132 30000 本科03-16 133 19000 本科03-16 134 30000 本科03-16
135 rows × 2 columns
df. iloc[ [ 2 , 4 ] , : ]
createTime education salary categories test test_1 2 03-16 不限 27500 高 不限03-16 27500不限 4 03-16 本科 15000 中 本科03-16 15000本科
df. iloc[ [ 8 ] ]
createTime education salary categories test test_1 8 03-16 不限 7000 低 不限03-16 7000不限
df. append( df[ 8 : 9 ] )
createTime education salary categories test test_1 0 03-16 本科 27500 高 本科03-16 27500本科 1 03-16 本科 30000 高 本科03-16 30000本科 2 03-16 不限 27500 高 不限03-16 27500不限 3 03-16 本科 16500 中 本科03-16 16500本科 4 03-16 本科 15000 中 本科03-16 15000本科 ... ... ... ... ... ... ... 131 03-16 硕士 37500 高 硕士03-16 37500硕士 132 03-16 本科 30000 高 本科03-16 30000本科 133 03-16 本科 19000 中 本科03-16 19000本科 134 03-16 本科 30000 高 本科03-16 30000本科 8 03-16 不限 7000 低 不限03-16 7000不限
136 rows × 6 columns
41.将createTime列设置为索引
df. set_index( "createTime" )
education salary categories test test_1 createTime 03-16 本科 27500 高 本科03-16 27500本科 03-16 本科 30000 高 本科03-16 30000本科 03-16 不限 27500 高 不限03-16 27500不限 03-16 本科 16500 中 本科03-16 16500本科 03-16 本科 15000 中 本科03-16 15000本科 ... ... ... ... ... ... 03-16 本科 14000 中 本科03-16 14000本科 03-16 硕士 37500 高 硕士03-16 37500硕士 03-16 本科 30000 高 本科03-16 30000本科 03-16 本科 19000 中 本科03-16 19000本科 03-16 本科 30000 高 本科03-16 30000本科
135 rows × 5 columns
42.生成一个和df长度相同的随机数dataframe
df1 = pd. DataFrame( pd. Series( np. random. randint( 1 , 10 , 135 ) ) )
df1
0 0 5 1 1 2 2 3 9 4 3 ... ... 130 2 131 9 132 9 133 4 134 7
135 rows × 1 columns
43.将上一题生成的dataframe与df合并
df= pd. concat( [ df, df1] , axis= 1 )
df
createTime education salary categories test test_1 0 0 03-16 本科 27500 高 本科03-16 27500本科 5 1 03-16 本科 30000 高 本科03-16 30000本科 1 2 03-16 不限 27500 高 不限03-16 27500不限 2 3 03-16 本科 16500 中 本科03-16 16500本科 9 4 03-16 本科 15000 中 本科03-16 15000本科 3 ... ... ... ... ... ... ... ... 130 03-16 本科 14000 中 本科03-16 14000本科 2 131 03-16 硕士 37500 高 硕士03-16 37500硕士 9 132 03-16 本科 30000 高 本科03-16 30000本科 9 133 03-16 本科 19000 中 本科03-16 19000本科 4 134 03-16 本科 30000 高 本科03-16 30000本科 7
135 rows × 7 columns
44.生成新的一列new为salary列减去之前生成随机数列
df[ "new" ] = df[ "salary" ] - df[ 0 ]
df
createTime education salary categories test test_1 0 new 0 03-16 本科 27500 高 本科03-16 27500本科 5 27495 1 03-16 本科 30000 高 本科03-16 30000本科 1 29999 2 03-16 不限 27500 高 不限03-16 27500不限 2 27498 3 03-16 本科 16500 中 本科03-16 16500本科 9 16491 4 03-16 本科 15000 中 本科03-16 15000本科 3 14997 ... ... ... ... ... ... ... ... ... 130 03-16 本科 14000 中 本科03-16 14000本科 2 13998 131 03-16 硕士 37500 高 硕士03-16 37500硕士 9 37491 132 03-16 本科 30000 高 本科03-16 30000本科 9 29991 133 03-16 本科 19000 中 本科03-16 19000本科 4 18996 134 03-16 本科 30000 高 本科03-16 30000本科 7 29993
135 rows × 8 columns
45.检查数据中是否含有任何缺失值
df. isnull( ) . values. any ( )
False
46.将salary列类型转换为浮点数
df[ 'salary' ] . astype( np. float64)
0 27500.0
1 30000.0
2 27500.0
3 16500.0
4 15000.0
...
130 14000.0
131 37500.0
132 30000.0
133 19000.0
134 30000.0
Name: salary, Length: 135, dtype: float64
47.计算salary大于10000的次数
len ( df[ df[ 'salary' ] > 8000 ] )
123
48.查看每种学历出现的次数
df. education. value_counts( )
本科 119
硕士 7
不限 5
大专 4
Name: education, dtype: int64
df[ "education" ] . value_counts( )
本科 119
硕士 7
不限 5
大专 4
Name: education, dtype: int64
df[ [ "education" ] ] . value_counts( )
education
本科 119
硕士 7
不限 5
大专 4
dtype: int64
49.查看education列共有几种学历
df[ "education" ] . unique( )
array(['本科', '不限', '硕士', '大专'], dtype=object)
df[ "education" ] . nunique( )
4
50.提取salary与new列的和大于60000的最后3行
df1 = df[ [ 'salary' , 'new' ] ]
rowsums = df1. apply ( np. sum , axis= 1 )
res = df. iloc[ np. where( rowsums > 60000 ) [ 0 ] [ - 3 : ] , : ]
res
createTime education salary categories test test_1 0 new 92 03-16 本科 35000 高 本科03-16 35000本科 5 34995 101 03-16 本科 37500 高 本科03-16 37500本科 3 37497 131 03-16 硕士 37500 高 硕士03-16 37500硕士 9 37491
df1. tail( )
salary new 130 14000 13998 131 37500 37491 132 30000 29991 133 19000 18996 134 30000 29993
rowsums
0 54995
1 59999
2 54998
3 32991
4 29997
...
130 27998
131 74991
132 59991
133 37996
134 59993
Length: 135, dtype: int64
51.使用绝对路径读取本地Excel数据
url_one = r'D:\exercise\pandas1206855\600000.SH.xls'
df = pd. read_excel( url_one)
WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero
df. head( 3 )
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率 0 600000.SH 浦发银行 2016-01-04 16.1356 16.1444 16.1444 15.4997 15.7205 42240610 754425783 -0.4151 -2.5725 17.8602 0.2264 3.320318e+11 3.320318e+11 1.865347e+10 6.5614 1 600000.SH 浦发银行 2016-01-05 15.7205 15.4644 15.9501 15.3672 15.8618 58054793 1034181474 0.1413 0.8989 17.8139 0.3112 3.350163e+11 3.350163e+11 1.865347e+10 6.6204 2 600000.SH 浦发银行 2016-01-06 15.8618 15.8088 16.0208 15.6234 15.9855 46772653 838667398 0.1236 0.7795 17.9307 0.2507 3.376278e+11 3.376278e+11 1.865347e+10 6.6720
53.查看每列数据缺失值情况
df. isnull( ) . sum ( )
代码 1
简称 2
日期 2
前收盘价(元) 2
开盘价(元) 2
最高价(元) 2
最低价(元) 2
收盘价(元) 2
成交量(股) 2
成交金额(元) 2
涨跌(元) 2
涨跌幅(%) 2
均价(元) 2
换手率(%) 2
A股流通市值(元) 2
总市值(元) 2
A股流通股本(股) 2
市盈率 2
dtype: int64
54.提取日期列含有空值的行
df[ df[ "日期" ] . isnull( ) ]
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率 327 NaN NaN NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 328 数据来源:Wind资讯 NaN NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
55.输出每列缺失值具体行数
for columname in df. columns:
if df[ columname] . count( ) != len ( data) :
loc = df[ columname] [ df[ columname] . isnull( ) . values== True ] . index. tolist( )
print ( '列名:"{}", 第{}行位置有缺失值' . format ( columname, loc) )
列名:"代码", 第[327]行位置有缺失值
列名:"简称", 第[327, 328]行位置有缺失值
列名:"日期", 第[327, 328]行位置有缺失值
列名:"前收盘价(元)", 第[327, 328]行位置有缺失值
列名:"开盘价(元)", 第[327, 328]行位置有缺失值
列名:"最高价(元)", 第[327, 328]行位置有缺失值
列名:"最低价(元)", 第[327, 328]行位置有缺失值
列名:"收盘价(元)", 第[327, 328]行位置有缺失值
列名:"成交量(股)", 第[327, 328]行位置有缺失值
列名:"成交金额(元)", 第[327, 328]行位置有缺失值
列名:"涨跌(元)", 第[327, 328]行位置有缺失值
列名:"涨跌幅(%)", 第[327, 328]行位置有缺失值
列名:"均价(元)", 第[327, 328]行位置有缺失值
列名:"换手率(%)", 第[327, 328]行位置有缺失值
列名:"A股流通市值(元)", 第[327, 328]行位置有缺失值
列名:"总市值(元)", 第[327, 328]行位置有缺失值
列名:"A股流通股本(股)", 第[327, 328]行位置有缺失值
列名:"市盈率", 第[327, 328]行位置有缺失值
56.删除所有存在缺失值的行
'''
备注
axis:0-行操作(默认),1-列操作
how:any-只要有空值就删除(默认),all-全部为空值才删除
inplace:False-返回新的数据集(默认),True-在原数据集上操作
'''
data = df
df. dropna( axis= 0 , how= 'any' , inplace= True )
df. tail( )
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率 322 600000.SH 浦发银行 2017-05-03 15.16 15.16 15.16 15.05 15.08 14247943 215130847 -0.08 -0.5277 15.0991 0.0659 3.260037e+11 3.260037e+11 2.161828e+10 6.1395 323 600000.SH 浦发银行 2017-05-04 15.08 15.07 15.07 14.90 14.98 19477788 291839737 -0.10 -0.6631 14.9832 0.0901 3.238418e+11 3.238418e+11 2.161828e+10 6.0988 324 600000.SH 浦发银行 2017-05-05 14.98 14.95 14.98 14.52 14.92 40194577 592160198 -0.06 -0.4005 14.7323 0.1859 3.225447e+11 3.225447e+11 2.161828e+10 6.0744 325 600000.SH 浦发银行 2017-05-08 14.92 14.78 14.90 14.51 14.86 43568576 638781010 -0.06 -0.4021 14.6615 0.2015 3.212476e+11 3.212476e+11 2.161828e+10 6.0500 326 600000.SH 浦发银行 2017-05-09 14.86 14.69 14.84 14.66 14.76 19225492 283864640 -0.10 -0.6729 14.765 0.0889 3.190858e+11 3.190858e+11 2.161828e+10 6.0093
57.绘制收盘价的折线图
import matplotlib. pyplot as plt
plt. style. use( 'seaborn-darkgrid' )
plt. rc( 'font' , size= 6 )
plt. rc( 'figure' , figsize= ( 4 , 3 ) , dpi= 150 )
df[ "收盘价(元)" ] . plot( )
<AxesSubplot:>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BY6RLYWY-1606139752541)(output_189_1.png)]
import matplotlib. pyplot as plt
plt. plot( df[ '收盘价(元)' ] )
plt. show( )
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTSU9MFt-1606139752543)(output_190_0.png)]
58.同时绘制开盘价与收盘价
df[ [ '收盘价(元)' , '开盘价(元)' ] ] . plot( )
<AxesSubplot:>
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 25910 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 30424 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 20215 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 20803 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 24320 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 25910 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 30424 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 20215 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 20803 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 24320 missing from current font.
font.set_text(s, 0, flags=flags)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1oGzXF0M-1606139752544)(output_192_2.png)]
59.绘制涨跌幅的直方图
plt. hist( df[ '涨跌幅(%)' ] )
df[ '涨跌幅(%)' ] . hist( )
plt. show( )
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-99LGRTuT-1606139752545)(output_194_0.png)]
data = df
data[ '涨跌幅(%)' ] . hist( bins = 30 )
<AxesSubplot:>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xvW5p9k0-1606139752546)(output_195_1.png)]
60.让直方图更细致
data[ '涨跌幅(%)' ] . hist( bins = 30 )
<AxesSubplot:>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9TaQG7nW-1606139752547)(output_197_1.png)]
61.以data的列名创建一个dataframe
temp = pd. DataFrame( columns = data. columns. to_list( ) )
data. columns
Index(['代码', '简称', '日期', '前收盘价(元)', '开盘价(元)', '最高价(元)', '最低价(元)', '收盘价(元)',
'成交量(股)', '成交金额(元)', '涨跌(元)', '涨跌幅(%)', '均价(元)', '换手率(%)', 'A股流通市值(元)',
'总市值(元)', 'A股流通股本(股)', '市盈率'],
dtype='object')
data. columns. to_list( )
['代码',
'简称',
'日期',
'前收盘价(元)',
'开盘价(元)',
'最高价(元)',
'最低价(元)',
'收盘价(元)',
'成交量(股)',
'成交金额(元)',
'涨跌(元)',
'涨跌幅(%)',
'均价(元)',
'换手率(%)',
'A股流通市值(元)',
'总市值(元)',
'A股流通股本(股)',
'市盈率']
62.打印所有换手率不是数字的行
for i in range ( len ( data) ) :
if type ( data. iloc[ i, 13 ] ) != float :
temp = temp. append( data. loc[ i] )
temp
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率 26 600000.SH 浦发银行 2016-02-16 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 27 600000.SH 浦发银行 2016-02-17 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 28 600000.SH 浦发银行 2016-02-18 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 29 600000.SH 浦发银行 2016-02-19 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 30 600000.SH 浦发银行 2016-02-22 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 31 600000.SH 浦发银行 2016-02-23 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 32 600000.SH 浦发银行 2016-02-24 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 33 600000.SH 浦发银行 2016-02-25 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 34 600000.SH 浦发银行 2016-02-26 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 35 600000.SH 浦发银行 2016-02-29 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 36 600000.SH 浦发银行 2016-03-01 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 37 600000.SH 浦发银行 2016-03-02 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 38 600000.SH 浦发银行 2016-03-03 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 39 600000.SH 浦发银行 2016-03-04 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 40 600000.SH 浦发银行 2016-03-07 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 41 600000.SH 浦发银行 2016-03-08 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 42 600000.SH 浦发银行 2016-03-09 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 43 600000.SH 浦发银行 2016-03-10 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
63.打印所有换手率为–的行
data[ data[ '换手率(%)' ] . isin( [ '--' ] ) ]
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率 26 600000.SH 浦发银行 2016-02-16 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 27 600000.SH 浦发银行 2016-02-17 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 28 600000.SH 浦发银行 2016-02-18 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 29 600000.SH 浦发银行 2016-02-19 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 30 600000.SH 浦发银行 2016-02-22 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 31 600000.SH 浦发银行 2016-02-23 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 32 600000.SH 浦发银行 2016-02-24 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 33 600000.SH 浦发银行 2016-02-25 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 34 600000.SH 浦发银行 2016-02-26 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 35 600000.SH 浦发银行 2016-02-29 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 36 600000.SH 浦发银行 2016-03-01 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 37 600000.SH 浦发银行 2016-03-02 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 38 600000.SH 浦发银行 2016-03-03 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 39 600000.SH 浦发银行 2016-03-04 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 40 600000.SH 浦发银行 2016-03-07 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 41 600000.SH 浦发银行 2016-03-08 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 42 600000.SH 浦发银行 2016-03-09 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801 43 600000.SH 浦发银行 2016-03-10 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
64.重置data的行号
data = data. reset_index( )
65.删除所有换手率为非数字的行
k = [ ]
for i in range ( len ( data) ) :
if type ( data. iloc[ i, 13 ] ) != float :
k. append( i)
data. drop( labels= k, inplace= True )
66.绘制换手率的密度曲线
data[ '换手率(%)' ] . plot( kind= 'kde' )
<AxesSubplot:ylabel='Density'>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jL73dTog-1606139752549)(output_211_1.png)]
67.计算前一天与后一天收盘价的差值
data[ '收盘价(元)' ] . diff( )
0 NaN
1 0.1413
2 0.1237
3 -0.5211
4 -0.0177
...
322 -0.0800
323 -0.1000
324 -0.0600
325 -0.0600
326 -0.1000
Name: 收盘价(元), Length: 309, dtype: float64
68.计算前一天与后一天收盘价变化率
data[ '收盘价(元)' ] . pct_change( )
0 NaN
1 0.008988
2 0.007799
3 -0.032598
4 -0.001145
...
322 -0.005277
323 -0.006631
324 -0.004005
325 -0.004021
326 -0.006729
Name: 收盘价(元), Length: 309, dtype: float64
69.设置日期为索引
data = data. set_index( '日期' )
data. tail( )
index 代码 简称 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率 日期 2017-05-03 322 600000.SH 浦发银行 15.16 15.16 15.16 15.05 15.08 14247943 215130847 -0.08 -0.5277 15.0991 0.0659 3.260037e+11 3.260037e+11 2.161828e+10 6.1395 2017-05-04 323 600000.SH 浦发银行 15.08 15.07 15.07 14.90 14.98 19477788 291839737 -0.10 -0.6631 14.9832 0.0901 3.238418e+11 3.238418e+11 2.161828e+10 6.0988 2017-05-05 324 600000.SH 浦发银行 14.98 14.95 14.98 14.52 14.92 40194577 592160198 -0.06 -0.4005 14.7323 0.1859 3.225447e+11 3.225447e+11 2.161828e+10 6.0744 2017-05-08 325 600000.SH 浦发银行 14.92 14.78 14.90 14.51 14.86 43568576 638781010 -0.06 -0.4021 14.6615 0.2015 3.212476e+11 3.212476e+11 2.161828e+10 6.0500 2017-05-09 326 600000.SH 浦发银行 14.86 14.69 14.84 14.66 14.76 19225492 283864640 -0.10 -0.6729 14.765 0.0889 3.190858e+11 3.190858e+11 2.161828e+10 6.0093
70.以5个数据作为一个数据滑动窗口,在这个5个数据上取均值(收盘价)
data[ '收盘价(元)' ] . rolling( 5 ) . mean( )
日期
2016-01-04 NaN
2016-01-05 NaN
2016-01-06 NaN
2016-01-07 NaN
2016-01-08 15.69578
...
2017-05-03 15.14200
2017-05-04 15.12800
2017-05-05 15.07000
2017-05-08 15.00000
2017-05-09 14.92000
Name: 收盘价(元), Length: 309, dtype: float64
71.以5个数据作为一个数据滑动窗口,计算这五个数据总和(收盘价)
data[ '收盘价(元)' ] . rolling( 5 ) . sum ( )
日期
2016-01-04 NaN
2016-01-05 NaN
2016-01-06 NaN
2016-01-07 NaN
2016-01-08 78.4789
...
2017-05-03 75.7100
2017-05-04 75.6400
2017-05-05 75.3500
2017-05-08 75.0000
2017-05-09 74.6000
Name: 收盘价(元), Length: 309, dtype: float64
72.将收盘价5日均线、20日均线与原始数据绘制在同一个图上
data[ '收盘价(元)' ] . plot( )
data[ '收盘价(元)' ] . rolling( 5 ) . mean( ) . plot( )
data[ '收盘价(元)' ] . rolling( 20 ) . mean( ) . plot( )
plt. show( )
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 26399 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 26399 missing from current font.
font.set_text(s, 0, flags=flags)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9fkJ9O1H-1606139752550)(output_224_1.png)]
73.按周为采样规则,取一周收盘价最大值
data[ '收盘价(元)' ] . resample( 'W' ) . max ( )
日期
2016-01-10 15.9855
2016-01-17 15.8265
2016-01-24 15.6940
2016-01-31 15.0405
2016-02-07 16.2328
...
2017-04-16 15.9700
2017-04-23 15.5600
2017-04-30 15.2100
2017-05-07 15.1600
2017-05-14 14.8600
Freq: W-SUN, Name: 收盘价(元), Length: 71, dtype: float64
74.绘制重采样数据与原始数据
data[ '收盘价(元)' ] . plot( )
data[ '收盘价(元)' ] . resample( '7D' ) . max ( ) . plot( )
<AxesSubplot:xlabel='日期'>
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 26399 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 26399 missing from current font.
font.set_text(s, 0, flags=flags)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r26wfrk2-1606139752551)(output_228_2.png)]
75.将数据往后移动5天
data. shift( 5 )
index 代码 简称 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率 日期 2016-01-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2016-01-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2016-01-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2016-01-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2016-01-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 2017-05-03 317.0 600000.SH 浦发银行 15.00 15.02 15.10 14.99 15.05 12975919 195296862 0.05 0.3333 15.0507 0.06 3.253551e+11 3.253551e+11 2.161828e+10 6.1273 2017-05-04 318.0 600000.SH 浦发银行 15.05 15.06 15.11 15.00 15.05 14939871 225022668 0.00 0.0000 15.0619 0.0691 3.253551e+11 3.253551e+11 2.161828e+10 6.1273 2017-05-05 319.0 600000.SH 浦发银行 15.05 15.05 15.25 15.03 15.21 22887645 345791526 0.16 1.0631 15.1082 0.1059 3.288140e+11 3.288140e+11 2.161828e+10 6.1925 2017-05-08 320.0 600000.SH 浦发银行 15.21 15.15 15.22 15.08 15.21 15718509 238419161 0.00 0.0000 15.1681 0.0727 3.288140e+11 3.288140e+11 2.161828e+10 6.1925 2017-05-09 321.0 600000.SH 浦发银行 15.21 15.21 15.22 15.13 15.16 12607509 191225527 -0.05 -0.3287 15.1676 0.0583 3.277331e+11 3.277331e+11 2.161828e+10 6.1721
309 rows × 18 columns
76.将数据向前移动5天
data. shift( - 5 )
index 代码 简称 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率 日期 2016-01-04 5.0 600000.SH 浦发银行 15.4467 15.1994 15.4114 14.9786 15.0581 90177135 1550155933 -0.3886 -2.5157 17.1901 0.4834 3.180417e+11 3.180417e+11 1.865347e+10 6.2849 2016-01-05 6.0 600000.SH 浦发银行 15.0581 15.1641 15.4732 15.0846 15.4114 55374454 964061502 0.3533 2.3460 17.4099 0.2969 3.255031e+11 3.255031e+11 1.865347e+10 6.4324 2016-01-06 7.0 600000.SH 浦发银行 15.4114 15.5174 15.8088 15.3231 15.3584 47869312 843717365 -0.0530 -0.3438 17.6254 0.2566 3.243839e+11 3.243839e+11 1.865347e+10 6.4102 2016-01-07 8.0 600000.SH 浦发银行 15.3584 15.0140 15.8883 14.9168 15.8265 54838833 966117848 0.4681 3.0477 17.6174 0.294 3.342702e+11 3.342702e+11 1.865347e+10 6.6056 2016-01-08 9.0 600000.SH 浦发银行 15.8265 15.7205 16.0296 15.4732 15.5262 46723139 836146426 -0.3003 -1.8973 17.8958 0.2505 3.279280e+11 3.279280e+11 1.865347e+10 6.4803 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 2017-05-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2017-05-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2017-05-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2017-05-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2017-05-09 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
309 rows × 18 columns
77.使用expending函数计算开盘价的移动窗口均值
data[ '开盘价(元)' ] . expanding( min_periods= 1 ) . mean( )
日期
2016-01-04 16.144400
2016-01-05 15.804400
2016-01-06 15.805867
2016-01-07 15.784525
2016-01-08 15.761120
...
2017-05-03 16.041489
2017-05-04 16.038314
2017-05-05 16.034769
2017-05-08 16.030695
2017-05-09 16.026356
Name: 开盘价(元), Length: 309, dtype: float64
78.绘制上一题的移动均值与原始数据折线图
data[ 'expanding Open mean' ] = data[ '开盘价(元)' ] . expanding( min_periods= 1 ) . mean( )
data[ [ '开盘价(元)' , 'expanding Open mean' ] ] . plot( figsize= ( 16 , 6 ) )
<AxesSubplot:xlabel='日期'>
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 26399 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 24320 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 30424 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 20215 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 20803 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 26399 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 24320 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 30424 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 20215 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 20803 missing from current font.
font.set_text(s, 0, flags=flags)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y3WeqcaC-1606139752552)(output_236_2.png)]
79.计算布林指标
data[ 'former 30 days rolling Close mean' ] = data[ '收盘价(元)' ] . rolling( 20 ) . mean( )
data[ 'upper bound' ] = data[ 'former 30 days rolling Close mean' ] + 2 * data[ '收盘价(元)' ] . rolling( 20 ) . std( )
data[ 'lower bound' ] = data[ 'former 30 days rolling Close mean' ] - 2 * data[ '收盘价(元)' ] . rolling( 20 ) . std( )
80.计算布林线并绘制
data[ [ '收盘价(元)' , 'former 30 days rolling Close mean' , 'upper bound' , 'lower bound' ] ] . plot( figsize= ( 16 , 6 ) )
<AxesSubplot:xlabel='日期'>
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 26399 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 25910 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 30424 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 20215 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 20803 missing from current font.
font.set_text(s, 0.0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 26399 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 25910 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 30424 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 20215 missing from current font.
font.set_text(s, 0, flags=flags)
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\matplotlib\backends\backend_agg.py:201: RuntimeWarning: Glyph 20803 missing from current font.
font.set_text(s, 0, flags=flags)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aGno7OXK-1606139752553)(output_240_2.png)]
81.导入并查看pandas与numpy版本
import pandas as pd
import numpy as np
print ( np. __version__)
print ( pd. __version__)
1.19.1
1.1.1
82.从NumPy数组创建DataFrame
tem = np. random. randint( 1 , 100 , 20 )
df1 = pd. DataFrame( tem)
df1. tail( )
tem = np. arange( 0 , 100 , 5 )
df2 = pd. DataFrame( tem)
df2. tail( )
84.从NumPy数组创建DataFrame
tem = np. random. normal( 0 , 1 , 20 )
df3 = pd. DataFrame( tem)
df3. tail( )
0 15 -0.379478 16 1.326701 17 0.670421 18 -0.291537 19 0.817611
85.将df1,df2,df3按照行合并为新DataFrame
df = pd. concat( [ df1, df2, df3] , axis= 0 , ignore_index= True )
df. tail( )
0 55 -0.379478 56 1.326701 57 0.670421 58 -0.291537 59 0.817611
df = pd. concat( [ df1, df2, df3] , axis= 1 , ignore_index= True )
df. tail( )
0 1 2 15 36 75 -0.379478 16 62 80 1.326701 17 63 85 0.670421 18 10 90 -0.291537 19 33 95 0.817611
87.查看df所有数据的最小值、25%分位数、中位数、75%分位数、最大值
print ( np. percentile( df, q= [ 0 , 25 , 50 , 75 , 100 ] ) )
[-1.80791481 0.6438385 12.5 56.25 95. ]
88.修改列名为col1,col2,col3
df. columns = [ 'col1' , 'col2' , 'col3' ]
df. tail( )
col1 col2 col3 15 36 75 -0.379478 16 62 80 1.326701 17 63 85 0.670421 18 10 90 -0.291537 19 33 95 0.817611
89.提取第一列中不在第二列出现的数字
df[ 'col1' ] [ ~ df[ 'col1' ] . isin( df[ 'col2' ] ) ]
0 2
1 7
2 74
3 67
4 72
5 8
6 29
7 87
8 4
10 91
11 43
13 3
14 7
15 36
16 62
17 63
19 33
Name: col1, dtype: int32
90.提取第一列和第二列出现频率最高的三个数字
temp = df[ 'col1' ] . append( df[ 'col2' ] )
temp. value_counts( ) . index[ : 3 ]
Int64Index([25, 10, 7], dtype='int64')
temp. value_counts( ) . head( 10 )
25 3
10 2
7 2
2 1
67 1
4 1
65 1
5 1
70 1
87 1
dtype: int64
92.计算第一列数字前一个与后一个的差值
df[ 'col1' ] . diff( ) . tolist( )
[nan,
5.0,
67.0,
-7.0,
5.0,
-64.0,
21.0,
58.0,
-83.0,
21.0,
66.0,
-48.0,
-18.0,
-22.0,
4.0,
29.0,
26.0,
1.0,
-53.0,
23.0]
93.将col1,col2,clo3三列顺序颠倒
b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象
a = [0,1,2,3,4,5,6,7,8,9] b = a[1:3] # [1,2] 当i缺省时,默认为0,即 a[:3]相当于 a[0:3] 当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10] 当i,j都缺省时,a[:]就相当于完整复制一份a
b = a[i:j:s]表示:i,j与上面的一样,但s表示步进,缺省为1. 所以a[i:j:1]相当于a[i:j] 当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1 所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。
df. iloc[ : , : : - 1 ]
col3 col2 col1 0 -1.049610 0 2 1 0.120536 5 7 2 -0.472164 10 74 3 1.208551 15 67 4 -1.807915 20 72 5 -0.608977 25 8 6 0.564092 30 29 7 -0.208467 35 87 8 -0.645818 40 4 9 0.973554 45 25 10 -0.064707 50 91 11 0.148113 55 43 12 -0.250823 60 25 13 -0.334750 65 3 14 1.626963 70 7 15 -0.379478 75 36 16 1.326701 80 62 17 0.670421 85 63 18 -0.291537 90 10 19 0.817611 95 33
94.提取第一列位置在1,10,15的数字
df[ 'col1' ] . take( [ 1 , 10 , 15 ] )
1 7
10 91
15 36
Name: col1, dtype: int32
df. iloc[ [ 1 , 10 , 15 ] , 0 ]
1 7
10 91
15 36
Name: col1, dtype: int32
95.查找第一列的局部最大值位置
tem = np. diff( np. sign( np. diff( df[ 'col1' ] ) ) )
np. where( tem == - 2 ) [ 0 ] + 1
array([ 2, 4, 7, 10, 17], dtype=int64)
96.按行计算df的每一行均值
df[ [ 'col1' , 'col2' , 'col3' ] ] . mean( axis= 1 )
0 0.316797
1 4.040179
2 27.842612
3 27.736184
4 30.064028
5 10.797008
6 19.854697
7 40.597178
8 14.451394
9 23.657851
10 46.978431
11 32.716038
12 28.249726
13 22.555083
14 26.208988
15 36.873507
16 47.775567
17 49.556807
18 33.236154
19 42.939204
dtype: float64
97.对第二列计算移动平均值
np. convolve( df[ 'col2' ] , np. ones( 3 ) / 3 , mode= 'valid' )
array([ 5., 10., 15., 20., 25., 30., 35., 40., 45., 50., 55., 60., 65.,
70., 75., 80., 85., 90.])
98.将数据按照第三列值的大小升序排列
df. sort_values( "col3" , inplace= True )
df[ "col3" ]
4 -1.807915
0 -1.049610
8 -0.645818
5 -0.608977
2 -0.472164
15 -0.379478
13 -0.334750
18 -0.291537
12 -0.250823
7 -0.208467
10 -0.064707
1 0.120536
11 0.148113
6 0.564092
17 0.670421
19 0.817611
9 0.973554
3 1.208551
16 1.326701
14 1.626963
Name: col3, dtype: float64
99.将第一列大于50的数字修改为’高’
df. col1[ df[ 'col1' ] > 50 ] = '高'
E:\ProgramData\Anaconda3\envs\tf2.3\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
"""Entry point for launching an IPython kernel.
df[ 'col1' ]
4 高
0 2
8 4
5 8
2 高
15 36
13 3
18 10
12 25
7 高
10 高
1 7
11 43
6 29
17 高
19 33
9 25
3 高
16 高
14 7
Name: col1, dtype: object
df. col1
4 高
0 2
8 4
5 8
2 高
15 36
13 3
18 10
12 25
7 高
10 高
1 7
11 43
6 29
17 高
19 33
9 25
3 高
16 高
14 7
Name: col1, dtype: object
100.计算第二列与第三列之间的欧式距离
np. linalg. norm( df[ 'col2' ] - df[ 'col3' ] )
247.48229970698026
101.从CSV文件中读取指定数据
df = pd. read_csv( '数据1.csv' , encoding= 'gbk' , usecols= [ 'positionName' , 'salary' ] , nrows = 10 )
df
positionName salary 0 数据分析 37500 1 数据建模 15000 2 数据分析 3500 3 数据分析 45000 4 数据分析 30000 5 数据分析 50000 6 数据分析 30000 7 数据建模工程师 35000 8 数据分析专家 60000 9 数据分析师 40000
102.从CSV文件中读取指定数据
df = pd. read_csv( '数据2.csv' , converters= { '薪资水平' : lambda x: '高' if float ( x) > 10000 else '低' } )
df
学历要求 薪资水平 0 本科 高 1 硕士 高 2 本科 低 3 本科 高 4 不限 高 ... ... ... 1149 硕士 高 1150 本科 高 1151 本科 高 1152 本科 高 1153 本科 高
1154 rows × 2 columns
103.从上一题数据中,对薪资水平列每隔20行进行一次抽样
df. iloc[ : : 20 , : ] [ [ '薪资水平' ] ]
薪资水平 0 高 20 高 40 高 60 高 80 高 100 高 120 高 140 高 160 高 180 高 200 高 220 高 240 高 260 高 280 低 300 高 320 高 340 低 360 高 380 高 400 高 420 高 440 高 460 低 480 高 500 高 520 高 540 高 560 高 580 高 600 高 620 高 640 高 660 低 680 低 700 高 720 高 740 高 760 高 780 高 800 高 820 高 840 高 860 低 880 高 900 高 920 高 940 高 960 高 980 高 1000 高 1020 高 1040 高 1060 高 1080 高 1100 高 1120 高 1140 高
104.将数据取消使用科学计数法
df = pd. DataFrame( np. random. random( 10 ) ** 10 , columns= [ 'data' ] )
df
data 0 2.353154e-01 1 5.046102e-10 2 1.210372e-02 3 3.320882e-01 4 5.618341e-03 5 7.634267e-01 6 4.067364e-01 7 2.449082e-11 8 6.759164e-12 9 1.013198e-11
df. round ( 3 )
data 0 0.235 1 0.000 2 0.012 3 0.332 4 0.006 5 0.763 6 0.407 7 0.000 8 0.000 9 0.000
105.将上一题的数据转换为百分数
df. style. format ( { 'data' : '{0:.2%}' . format } )
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row0" class="row_heading level0 row0" >0</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row0_col0" class="data row0 col0" >23.53%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row1" class="row_heading level0 row1" >1</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row1_col0" class="data row1 col0" >0.00%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row2" class="row_heading level0 row2" >2</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row2_col0" class="data row2 col0" >1.21%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row3" class="row_heading level0 row3" >3</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row3_col0" class="data row3 col0" >33.21%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row4" class="row_heading level0 row4" >4</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row4_col0" class="data row4 col0" >0.56%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row5" class="row_heading level0 row5" >5</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row5_col0" class="data row5 col0" >76.34%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row6" class="row_heading level0 row6" >6</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row6_col0" class="data row6 col0" >40.67%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row7" class="row_heading level0 row7" >7</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row7_col0" class="data row7 col0" >0.00%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row8" class="row_heading level0 row8" >8</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row8_col0" class="data row8 col0" >0.00%</td>
</tr>
<tr>
<th id="T_856a8792_2d8f_11eb_b978_1831bf28bee4level0_row9" class="row_heading level0 row9" >9</th>
<td id="T_856a8792_2d8f_11eb_b978_1831bf28bee4row9_col0" class="data row9 col0" >0.00%</td>
</tr>
</tbody></table>
106.查找上一题数据中第3大值的行号
df[ 'data' ] . argsort( ) [ : : - 1 ] [ 7 ]
3
107.反转df的行
df. iloc[ : : - 1 , : ]
data 9 1.013198e-11 8 6.759164e-12 7 2.449082e-11 6 4.067364e-01 5 7.634267e-01 4 5.618341e-03 3 3.320882e-01 2 1.210372e-02 1 5.046102e-10 0 2.353154e-01
108.按照多列对数据进行合并
df1= pd. DataFrame( { 'key1' : [ 'K0' , 'K0' , 'K1' , 'K2' ] ,
'key2' : [ 'K0' , 'K1' , 'K0' , 'K1' ] ,
'A' : [ 'A0' , 'A1' , 'A2' , 'A3' ] ,
'B' : [ 'B0' , 'B1' , 'B2' , 'B3' ] } )
df2= pd. DataFrame( { 'key1' : [ 'K0' , 'K1' , 'K1' , 'K2' ] ,
'key2' : [ 'K0' , 'K0' , 'K0' , 'K0' ] ,
'C' : [ 'C0' , 'C1' , 'C2' , 'C3' ] ,
'D' : [ 'D0' , 'D1' , 'D2' , 'D3' ] } )
pd. merge( df1, df2, on= [ 'key1' , 'key2' ] )
key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K1 K0 A2 B2 C1 D1 2 K1 K0 A2 B2 C2 D2
109.按照多列对数据进行合并
pd. merge( df1, df2, how= 'left' , on= [ 'key1' , 'key2' ] )
key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K0 K1 A1 B1 NaN NaN 2 K1 K0 A2 B2 C1 D1 3 K1 K0 A2 B2 C2 D2 4 K2 K1 A3 B3 NaN NaN
110.再次读取数据1并显示所有的列
df = pd. read_csv( '数据1.csv' , encoding= 'gbk' )
pd. set_option( "display.max.columns" , None )
df
positionId positionName companyId companyLogo companySize industryField financeStage companyLabelList firstType secondType thirdType skillLables positionLables industryLables createTime formatCreateTime district businessZones salary workYear jobNature education positionAdvantage imState lastLogin publisherId approve subwayline stationname linestaion latitude longitude hitags resumeProcessRate resumeProcessDay score newScore matchScore matchScoreExplain query explain isSchoolJob adWord plus pcShow appShow deliver gradeDescription promotionScoreExplain isHotHire count aggregatePositionIds famousCompany 0 6802721 数据分析 475770 i/image2/M01/B7/3E/CgoB5lwPfEaAdn8WAABWQ0Jgl5s... 50-150人 移动互联网,电商 A轮 ['绩效奖金', '带薪年假', '定期体检', '弹性工作'] 产品|需求|项目类 数据分析 数据分析 ['SQL', '数据库', '数据运营', 'BI'] ['电商', '社交', 'SQL', '数据库', '数据运营', 'BI'] ['电商', '社交', 'SQL', '数据库', '数据运营', 'BI'] 2020/3/16 11:00 11:00发布 余杭区 ['仓前'] 37500 1-3年 全职 本科 五险一金、弹性工作、带薪年假、年度体检 today 2020/3/16 11:00 12022406 1 NaN NaN NaN 30.278421 120.005922 NaN 50 1 233 0 15.101875 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False 1 5204912 数据建模 50735 image1/M00/00/85/CgYXBlTUXeeAR0IjAABbroUk-dw97... 150-500人 电商 B轮 ['年终奖金', '做五休二', '六险一金', '子女福利'] 开发|测试|运维类 数据开发 建模 ['算法', '数据架构'] ['算法', '数据架构'] [] 2020/3/16 11:08 11:08发布 滨江区 ['西兴', '长河'] 15000 3-5年 全职 本科 六险一金,定期体检,丰厚年终 disabled 2020/3/16 11:08 5491688 1 NaN NaN NaN 30.188041 120.201179 NaN 23 1 176 0 32.559414 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False 2 6877668 数据分析 100125 image2/M00/0C/57/CgqLKVYcOA2ADcFuAAAE8MukIKA74... 2000人以上 移动互联网,企业服务 上市公司 ['节日礼物', '年底双薪', '股票期权', '带薪年假'] 产品|需求|项目类 数据分析 数据分析 ['数据库', '数据分析', 'SQL'] ['数据库', 'SQL'] [] 2020/3/16 10:33 10:33发布 江干区 ['四季青', '钱江新城'] 3500 1-3年 全职 本科 五险一金 周末双休 不加班 节日福利 today 2020/3/16 10:33 5322583 1 4号线 江锦路 4号线_城星路;4号线_市民中心;4号线_江锦路 30.241521 120.212539 NaN 11 4 80 0 14.972357 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False 3 6496141 数据分析 26564 i/image2/M01/F7/3F/CgoB5lyGAQGAZeI-AAAdOqXecnw... 500-2000人 电商 D轮及以上 ['生日趴', '每月腐败基金', '每月补贴', '年度旅游'] 开发|测试|运维类 数据开发 数据分析 [] ['电商'] ['电商'] 2020/3/16 10:10 10:10发布 江干区 NaN 45000 3-5年 全职 本科 年终奖等 threeDays 2020/3/16 10:10 9814560 1 1号线 文泽路 1号线_文泽路 30.299404 120.350304 NaN 100 1 68 0 12.874153 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] True 4 6467417 数据分析 29211 i/image2/M01/77/B8/CgoB5l1WDyGATNP5AAAlY3h88SY... 2000人以上 物流丨运输 上市公司 ['技能培训', '免费班车', '专项奖金', '岗位晋升'] 产品|需求|项目类 数据分析 数据分析 ['BI', '数据分析', '数据运营'] ['BI', '数据运营'] [] 2020/3/16 09:56 09:56发布 余杭区 ['仓前'] 30000 3-5年 全职 大专 五险一金 disabled 2020/3/16 09:56 6392394 1 NaN NaN NaN 30.282952 120.009765 NaN 20 1 66 0 12.755375 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] True ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 100 6884346 数据分析师 21236 i/image/M00/43/F6/CgqKkVeEh76AUVPoAAA2Bj747wU6... 500-2000人 移动互联网,医疗丨健康 C轮 ['技能培训', '年底双薪', '节日礼物', '绩效奖金'] 产品|需求|项目类 数据分析 数据分析 ['数据库', '商业', '数据分析', 'SQL'] ['医疗健康', '数据库', '商业', '数据分析', 'SQL'] ['医疗健康', '数据库', '商业', '数据分析', 'SQL'] 2020/3/11 16:45 2020/3/11 萧山区 NaN 25000 3-5年 全职 不限 大牛老板,开放环境,民生行业,龙头公司 threeDays 2020/3/16 09:49 1665167 1 NaN NaN NaN 30.203078 120.247069 NaN 96 1 0 0 0.314259 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False 101 6849100 商业数据分析 72076 i/image2/M01/92/A4/CgotOV2LPUmAR_8dAAB_DlDMiXA... 500-2000人 移动互联网,电商 C轮 ['节日礼物', '股票期权', '带薪年假', '年度旅游'] 市场|商务类 市场|营销 商业数据分析 ['市场', '数据分析', '行业分析', '市场分析'] ['电商', '市场', '数据分析', '行业分析', '市场分析'] ['电商', '市场', '数据分析', '行业分析', '市场分析'] 2020/3/14 17:38 2天前发布 余杭区 NaN 35000 1-3年 全职 硕士 五险一金、带薪休假 threeDays 2020/3/14 17:38 1732416 1 NaN NaN NaN 30.276694 119.990918 NaN 2 3 0 0 0.283276 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False 102 6803432 奔驰·耀出行-BI数据分析专家 751158 i/image3/M01/64/93/Cgq2xl48z2mAeYRoAAD6Qf_Jeq8... 150-500人 移动互联网 不需要融资 [] 开发|测试|运维类 数据开发 数据分析 ['MySQL', '数据处理', '数据分析'] ['MySQL', '数据处理', '数据分析'] [] 2020/3/14 22:39 2天前发布 滨江区 ['西兴'] 30000 3-5年 全职 本科 奔驰 吉利 世界500强 threeDays 2020/3/14 22:39 4785643 1 1号线 滨和路 1号线_滨和路;1号线_江陵路;1号线_滨和路;1号线_江陵路 30.208562 120.219225 NaN 63 1 0 0 0.256719 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False 103 6704835 BI数据分析师 52840 i/image2/M00/26/CA/CgoB5lofsguAfk9ZAACoL3r4p24... 2000人以上 电商 上市公司 ['技能培训', '年底双薪', '节日礼物', '绩效奖金'] 开发|测试|运维类 数据开发 数据分析 ['SQLServer', '数据分析'] ['电商', '新零售', 'SQLServer', '数据分析'] ['电商', '新零售', 'SQLServer', '数据分析'] 2020/3/9 15:00 2020/3/9 余杭区 ['仓前'] 20000 3-5年 全职 本科 阿里巴巴;商业智能; threeDays 2020/3/16 10:15 5846350 1 NaN NaN NaN 30.280177 120.023521 ['16薪', '一年调薪2次'] 0 0 0 0 0.281062 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] True 104 6728058 数据分析专家-LQ(J181203029) 2474 i/image2/M01/14/4D/CgoB5lyq5fqAAHHzAAAa148hbk8... 2000人以上 汽车丨出行 不需要融资 ['弹性工作', '节日礼物', '岗位晋升', '技能培训'] 产品|需求|项目类 数据分析 其他数据分析 [] ['滴滴'] ['滴滴'] 2020/3/13 18:24 3天前发布 西湖区 NaN 21500 5-10年 全职 本科 广阔平台诱人福利 disabled 2020/3/13 19:51 6799495 1 NaN NaN NaN 30.290746 120.074315 NaN 0 0 0 0 0.159343 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] True
105 rows × 53 columns
111.查找secondType与thirdType值相等的行号
np. where( df. secondType == df. thirdType)
(array([ 0, 2, 4, 5, 6, 10, 14, 23, 25, 27, 28, 29, 30,
33, 37, 38, 39, 40, 41, 48, 49, 52, 53, 55, 57, 61,
65, 66, 67, 71, 73, 74, 75, 79, 80, 82, 85, 88, 89,
91, 96, 100], dtype=int64),)
112.查找薪资大于平均薪资的第三个数据
df[ df[ 'salary' ] > df[ 'salary' ] . mean( ) ] [ 'salary' ] . index[ 2 ]
5
113.将上一题数据的salary列开根号
df[ [ 'salary' ] ] . apply ( np. sqrt)
salary 0 193.649167 1 122.474487 2 59.160798 3 212.132034 4 173.205081 ... ... 100 158.113883 101 187.082869 102 173.205081 103 141.421356 104 146.628783
105 rows × 1 columns
114.将上一题数据的linestaion列按_拆分
df[ 'split' ] = df[ 'linestaion' ] . str . split( '_' )
df[ 'linestaion' ] . tail( )
100 NaN
101 NaN
102 1号线_滨和路;1号线_江陵路;1号线_滨和路;1号线_江陵路
103 NaN
104 NaN
Name: linestaion, dtype: object
df. tail( )
positionId positionName companyId companyLogo companySize industryField financeStage companyLabelList firstType secondType thirdType skillLables positionLables industryLables createTime formatCreateTime district businessZones salary workYear jobNature education positionAdvantage imState lastLogin publisherId approve subwayline stationname linestaion latitude longitude hitags resumeProcessRate resumeProcessDay score newScore matchScore matchScoreExplain query explain isSchoolJob adWord plus pcShow appShow deliver gradeDescription promotionScoreExplain isHotHire count aggregatePositionIds famousCompany split 100 6884346 数据分析师 21236 i/image/M00/43/F6/CgqKkVeEh76AUVPoAAA2Bj747wU6... 500-2000人 移动互联网,医疗丨健康 C轮 ['技能培训', '年底双薪', '节日礼物', '绩效奖金'] 产品|需求|项目类 数据分析 数据分析 ['数据库', '商业', '数据分析', 'SQL'] ['医疗健康', '数据库', '商业', '数据分析', 'SQL'] ['医疗健康', '数据库', '商业', '数据分析', 'SQL'] 2020/3/11 16:45 2020/3/11 萧山区 NaN 25000 3-5年 全职 不限 大牛老板,开放环境,民生行业,龙头公司 threeDays 2020/3/16 09:49 1665167 1 NaN NaN NaN 30.203078 120.247069 NaN 96 1 0 0 0.314259 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False NaN 101 6849100 商业数据分析 72076 i/image2/M01/92/A4/CgotOV2LPUmAR_8dAAB_DlDMiXA... 500-2000人 移动互联网,电商 C轮 ['节日礼物', '股票期权', '带薪年假', '年度旅游'] 市场|商务类 市场|营销 商业数据分析 ['市场', '数据分析', '行业分析', '市场分析'] ['电商', '市场', '数据分析', '行业分析', '市场分析'] ['电商', '市场', '数据分析', '行业分析', '市场分析'] 2020/3/14 17:38 2天前发布 余杭区 NaN 35000 1-3年 全职 硕士 五险一金、带薪休假 threeDays 2020/3/14 17:38 1732416 1 NaN NaN NaN 30.276694 119.990918 NaN 2 3 0 0 0.283276 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False NaN 102 6803432 奔驰·耀出行-BI数据分析专家 751158 i/image3/M01/64/93/Cgq2xl48z2mAeYRoAAD6Qf_Jeq8... 150-500人 移动互联网 不需要融资 [] 开发|测试|运维类 数据开发 数据分析 ['MySQL', '数据处理', '数据分析'] ['MySQL', '数据处理', '数据分析'] [] 2020/3/14 22:39 2天前发布 滨江区 ['西兴'] 30000 3-5年 全职 本科 奔驰 吉利 世界500强 threeDays 2020/3/14 22:39 4785643 1 1号线 滨和路 1号线_滨和路;1号线_江陵路;1号线_滨和路;1号线_江陵路 30.208562 120.219225 NaN 63 1 0 0 0.256719 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False [1号线, 滨和路;1号线, 江陵路;1号线, 滨和路;1号线, 江陵路] 103 6704835 BI数据分析师 52840 i/image2/M00/26/CA/CgoB5lofsguAfk9ZAACoL3r4p24... 2000人以上 电商 上市公司 ['技能培训', '年底双薪', '节日礼物', '绩效奖金'] 开发|测试|运维类 数据开发 数据分析 ['SQLServer', '数据分析'] ['电商', '新零售', 'SQLServer', '数据分析'] ['电商', '新零售', 'SQLServer', '数据分析'] 2020/3/9 15:00 2020/3/9 余杭区 ['仓前'] 20000 3-5年 全职 本科 阿里巴巴;商业智能; threeDays 2020/3/16 10:15 5846350 1 NaN NaN NaN 30.280177 120.023521 ['16薪', '一年调薪2次'] 0 0 0 0 0.281062 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] True NaN 104 6728058 数据分析专家-LQ(J181203029) 2474 i/image2/M01/14/4D/CgoB5lyq5fqAAHHzAAAa148hbk8... 2000人以上 汽车丨出行 不需要融资 ['弹性工作', '节日礼物', '岗位晋升', '技能培训'] 产品|需求|项目类 数据分析 其他数据分析 [] ['滴滴'] ['滴滴'] 2020/3/13 18:24 3天前发布 西湖区 NaN 21500 5-10年 全职 本科 广阔平台诱人福利 disabled 2020/3/13 19:51 6799495 1 NaN NaN NaN 30.290746 120.074315 NaN 0 0 0 0 0.159343 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] True NaN
115.查看上一题数据中一共有多少列
df. shape[ 1 ]
54
116.提取industryField列以’数据’开头的行
df[ df[ 'industryField' ] . str . startswith( '数据' ) ] . tail( )
positionId positionName companyId companyLogo companySize industryField financeStage companyLabelList firstType secondType thirdType skillLables positionLables industryLables createTime formatCreateTime district businessZones salary workYear jobNature education positionAdvantage imState lastLogin publisherId approve subwayline stationname linestaion latitude longitude hitags resumeProcessRate resumeProcessDay score newScore matchScore matchScoreExplain query explain isSchoolJob adWord plus pcShow appShow deliver gradeDescription promotionScoreExplain isHotHire count aggregatePositionIds famousCompany split 92 6813626 资深数据分析专员 165939 i/image3/M01/65/71/CgpOIF5CFp2ACoo9AAD3IkKwlv8... 150-500人 数据服务 不需要融资 ['年底双薪', '带薪年假', '午餐补助', '定期体检'] 开发|测试|运维类 数据开发 数据分析 ['数据分析'] ['数据分析'] [] 2020/3/15 12:21 1天前发布 余杭区 NaN 30000 3-5年 全职 不限 阿里旗下、大数据 today 2020/3/15 13:13 8519805 1 NaN NaN NaN 30.281507 120.018621 NaN 1 1 1 0 0.440405 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False NaN 94 6818950 资深数据分析师 165939 i/image3/M01/65/71/CgpOIF5CFp2ACoo9AAD3IkKwlv8... 150-500人 数据服务 不需要融资 ['年底双薪', '带薪年假', '午餐补助', '定期体检'] 开发|测试|运维类 数据开发 数据分析 ['数据分析'] ['数据分析'] [] 2020/3/15 12:21 1天前发布 余杭区 NaN 30000 5-10年 全职 不限 阿里旗下、大数据 today 2020/3/15 13:13 8519805 1 NaN NaN NaN 30.281507 120.018621 NaN 1 1 1 0 0.407209 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False NaN 97 6718750 旅游大数据分析师(杭州) 122019 i/image/M00/1A/4A/CgqKkVb583WABT4BAABM5RuPCmk9... 50-150人 数据服务,企业服务 A轮 ['年底双薪', '股票期权', '午餐补助', '定期体检'] 开发|测试|运维类 数据开发 数据治理 ['数据分析', '数据处理'] ['旅游', '大数据', '数据分析', '数据处理'] ['旅游', '大数据', '数据分析', '数据处理'] 2020/3/12 16:38 2020/3/12 上城区 ['湖滨', '吴山'] 30000 1-3年 全职 本科 管理扁平 潜力项目 五险一金 周末双休 sevenDays 2020/3/13 08:48 11347630 1 2号线 中河北路 1号线_定安路;1号线_龙翔桥;1号线_凤起路;1号线_定安路;1号线_龙翔桥;1号线_凤起... 30.254169 120.164651 NaN 3 0 1 0 0.826756 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False [1号线, 定安路;1号线, 龙翔桥;1号线, 凤起路;1号线, 定安路;1号线, 龙翔桥;... 98 6655562 数据分析建模工程师 117422215 i/image2/M01/AF/6D/CgotOV3ki4iAOuo3AABbilI8DfA... 50-150人 数据服务,信息安全 A轮 ['午餐补助', '带薪年假', '16到18薪', '法定节假日'] 开发|测试|运维类 人工智能 机器学习 ['机器学习', '建模', '数据挖掘', '算法'] ['机器学习', '建模', '数据挖掘', '算法'] [] 2020/3/14 19:00 2天前发布 西湖区 NaN 30000 1-3年 全职 本科 海量数据 全链路建模实践 16-18薪 threeDays 2020/3/16 09:30 8810336 1 2号线 丰潭路 2号线_古翠路;2号线_丰潭路 30.291494 120.113955 NaN 0 0 0 0 0.356308 NaN NaN NaN 0 0 NaN 0 0 0 NaN NaN 0 0 [] False [2号线, 古翠路;2号线, 丰潭路] 99 6677939 数据分析建模工程师(校招) 117422215 i/image2/M01/AF/6D/CgotOV3ki4iAOuo3AABbilI8DfA... 50-150人 数据服务,信息安全 A轮 ['午餐补助', '带薪年假', '16到18薪', '法定节假日'] 开发|测试|运维类 人工智能 算法工程师 ['机器学习', '建模', '算法', '数据挖掘'] ['机器学习', '建模', '算法', '数据挖掘'] [] 2020/3/14 19:00 2天前发布 西湖区 NaN 36500 应届毕业生 全职 本科 海量数据 全链路建模实践 16-18薪 threeDays 2020/3/16 09:30 8810336 1 2号线 丰潭路 2号线_古翠路;2号线_丰潭路 30.291494 120.113955 NaN 0 0 0 0 0.338603 NaN NaN NaN 1 0 NaN 0 0 0 NaN NaN 0 0 [] False [2号线, 古翠路;2号线, 丰潭路]
117.按列制作数据透视表
pd. pivot_table( df, values= [ "salary" , "score" ] , index= "positionId" )
salary score positionId 5203054 30000 4.0 5204912 15000 176.0 5269002 37500 1.0 5453691 30000 4.0 5519962 37500 14.0 ... ... ... 6882983 27500 15.0 6884346 25000 0.0 6886661 37500 5.0 6888169 42500 1.0 6896403 30000 3.0
95 rows × 2 columns
118.同时对salary、score两列进行计算
df[ [ "salary" , "score" ] ] . agg( [ np. sum , np. mean, np. min ] )
salary score sum 3.331000e+06 1335.000000 mean 3.172381e+04 12.714286 amin 3.500000e+03 0.000000
119.对salary求平均,对score列求和
df. agg( { "salary" : np. sum , "score" : np. mean} )
salary 3.331000e+06
score 1.271429e+01
dtype: float64
120.计算并提取平均薪资最高的区
df[ [ 'district' , 'salary' ] ] . groupby( by= 'district' ) . mean( ) . sort_values( 'salary' , ascending= False ) . head( 1 )