pandas数据处理120题

1.DataFrame基本操作

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

1.将下面的字典创建为DataFrame

data = {"grammer":["Python","C","Java","GO",np.nan,"SQL","PHP","Python"],
       "score":[1,2,np.nan,4,5,6,7,10]}
df=pd.DataFrame(data)
df
grammerscore
0Python1.0
1C2.0
2JavaNaN
3GO4.0
4NaN5.0
5SQL6.0
6PHP7.0
7Python10.0

2.提取数据–提取含有字符串“Python”的行

# 方法一:
df[df['grammer']=='Python']
grammerscore
0Python1.0
7Python10.0
# 方法二:
results = df['grammer'].str.contains('Python')
results.fillna(value=False,inplace=True)
df[results]
grammerscore
0Python1.0
7Python10.0

3. 提取列名

# 输出df所有的列
df.columns
Index(['grammer', 'score'], dtype='object')

4.修改第二列列名为‘popularity’

# 修改第二列列名为‘popularity’
df.rename(columns={'score':'popularity'},inplace=True)
df
grammerpopularity
0Python1.0
1C2.0
2JavaNaN
3GO4.0
4NaN5.0
5SQL6.0
6PHP7.0
7Python10.0

5.统计grammer列中每种编程语言出现的次数

# 统计grammer列中每种编程语言出现的次数
df['grammer'].value_counts()
Python    2
C         1
Java      1
PHP       1
GO        1
SQL       1
Name: grammer, dtype: int64
# 统计一共出现多少个不重复的编程语言
# df['grammer'].nunique()
6

6.缺失值用上下值均值填充

#缺失值用上下值均值填充
df['popularity']=df['popularity'].fillna(df['popularity'].interpolate())
df
grammerpopularity
0Python1.0
1C2.0
2Java3.0
3GO4.0
4NaN5.0
5SQL6.0
6PHP7.0
7Python10.0

7.提取popularity列中值大于3的行

#提取popularity列中值大于3的行
df[df['popularity']>3]
grammerpopularity
3GO4.0
4NaN5.0
5SQL6.0
6PHP7.0
7Python10.0

8.按照grammer列进行去重

# 按照grammer列进行去重
df.drop_duplicates(['grammer'])
grammerpopularity
0Python1.0
1C2.0
2Java3.0
3GO4.0
4NaN5.0
5SQL6.0
6PHP7.0

9.计算popularity列平均值

# 计算popularity列平均值
df['popularity'].mean()
4.75

10.将grammer列转换为list

#将grammer列转换为list
df['grammer'].to_list()
['Python', 'C', 'Java', 'GO', nan, 'SQL', 'PHP', 'Python']

11.将dataframe保存为excel

#将dataframe保存为excel
df.to_excel('f1.xlsx')

12.查看数据行列数 形状

# 查看数据行列数 形状
df.shape
(8, 2)

13.提取popularity列值大于3小于7的行

# 提取popularity列值大于3小于7的行
df[(df['popularity']>3) & (df['popularity']<7)]
grammerpopularity
3GO4.0
4NaN5.0
5SQL6.0

14.交换两列的位置

## 交换两列的位置
#方法一:
df=df[['popularity','grammer']]
temp = df['popularity']
df.drop(labels=['popularity'], axis=1,inplace = True)
df.insert(0, 'popularity', temp)
df
popularitygrammer
01.0Python
12.0C
23.0Java
34.0GO
45.0NaN
56.0SQL
67.0PHP
710.0Python

15.提取popularity列最大值所在的行

# 提取popularity列最大值所在的行
df[df['popularity']==df['popularity'].max()]
popularitygrammer
710.0Python

16.查看数据最后5行

# 查看数据最后5行
df.tail()
popularitygrammer
34.0GO
45.0NaN
56.0SQL
67.0PHP
710.0Python

17. 删除最后一行数据

# 删除最后一行数据
df=df.drop(labels=df.shape[0]-1)

18. 添加一行数据[‘Perl’,6.6]

##  添加一行数据['Perl',6.6]
row = {'grammer':'Perl','popularity':6.6}
df = df.append(row,ignore_index=True)

19.对数据按照"popularity"列值的大小进行排序

# 对数据按照"popularity"列值的大小进行排序
df.sort_values("popularity",inplace=True)
df
popularitygrammer
01.0Python
12.0C
23.0Java
34.0GO
45.0NaN
56.0SQL
76.6Perl
67.0PHP

20.统计grammer列每个字符串的长度

df['grammer']=df['grammer'].fillna('R')
df['len_str']=df['grammer'].map(lambda x:len(x))
df
popularitygrammerlen_str
01.0Python6
12.0C1
23.0Java4
34.0GO2
45.0R1
56.0SQL3
76.6Perl4
67.0PHP3

2. Pandas数据处理

21.读取本地EXCEL数据

df = pd.read_excel('pandas120/21-50数据.xlsx')

22.查看df数据前5行

df.head()
createTimeeducationsalary
02020-03-16 11:30:18本科20k-35k
12020-03-16 10:58:48本科20k-40k
22020-03-16 10:46:39不限20k-35k
32020-03-16 10:45:44本科13k-20k
42020-03-16 10:20:41本科10k-20k

23.将salary列数据转换为最大值与最小值的平均值

#因为我们的数据中是20k-35k这种字符串,所以需要先用正则表达式提取数字
import re
# 方法一:apply + 自定义函数
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
createTimeeducationsalary
02020-03-16 11:30:18本科27500
12020-03-16 10:58:48本科30000
22020-03-16 10:46:39不限27500
32020-03-16 10:45:44本科16500
42020-03-16 10:20:41本科15000
............
1302020-03-16 11:36:07本科14000
1312020-03-16 09:54:47硕士37500
1322020-03-16 10:48:32本科30000
1332020-03-16 10:46:31本科19000
1342020-03-16 11:19:38本科30000

135 rows × 3 columns

# 方法二:iterrows + 正则
import re
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'))

24.将数据根据学历进行分组并计算平均薪资

df.groupby('education').mean()
salary
education
不限19600.000000
大专10000.000000
本科19361.344538
硕士20642.857143

25.将createTime列时间转换为月-日

for i in range(len(df)):
    df.ix[i,0] = df.ix[i,0].to_pydatetime().strftime("%m-%d")  
df.head()
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: FutureWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated
  
D:\Anaconda3\lib\site-packages\pandas\core\indexing.py:961: FutureWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated
  return getattr(section, self.name)[new_key]
createTimeeducationsalary
003-16本科27500
103-16本科30000
203-16不限27500
303-16本科16500
403-16本科15000
# iloc 同ix
for i in range(len(df)):
    df.iloc[i,0] = df.iloc[i,0].to_pydatetime().strftime("%m-%d")  
df.head()
createTimeeducationsalary
003-16本科20k-35k
103-16本科20k-40k
203-16不限20k-35k
303-16本科13k-20k
403-16本科10k-20k

26.查看索引、数据类型和内存信息

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 135 entries, 0 to 134
Data columns (total 3 columns):
createTime    135 non-null object
education     135 non-null object
salary        135 non-null int64
dtypes: int64(1), object(2)
memory usage: 3.3+ KB

27.查看数值型列的汇总统计

df.describe()
salary
count135.000000
mean19159.259259
std8661.686922
min3500.000000
25%14000.000000
50%17500.000000
75%25000.000000
max45000.000000

28.新增一列根据salary将数据分为三组

bins = [0,5000, 20000, 50000]
group_names = ['低', '中', '高']
df['categories'] = pd.cut(df['salary'], bins, labels=group_names)
df
createTimeeducationsalarycategories
003-16本科27500
103-16本科30000
203-16不限27500
303-16本科16500
403-16本科15000
...............
13003-16本科14000
13103-16硕士37500
13203-16本科30000
13303-16本科19000
13403-16本科30000

135 rows × 4 columns

29.按照salary列对数据降序排列

df.sort_values('salary', ascending=False)
createTimeeducationsalarycategories
5303-16本科45000
3703-16本科40000
10103-16本科37500
1603-16本科37500
13103-16硕士37500
...............
12303-16本科4500
12603-16本科4000
11003-16本科4000
9603-16不限3500
11303-16本科3500

135 rows × 4 columns

30.取出第33行数据

df.loc[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');

在这里插入图片描述

33.绘制薪资水平密度曲线

df.salary.plot(kind='kde',xlim=(0,80000));

在这里插入图片描述

34.删除最后一列categories

del df['categories']
# 等价于
# df.drop(columns=['categories'], inplace=True)

35.将df的第一列与第二列合并为新的一列

df['test'] = df['education']+df['createTime']
df
createTimeeducationsalarytest
003-16本科27500本科03-16
103-16本科30000本科03-16
203-16不限27500不限03-16
303-16本科16500本科03-16
403-16本科15000本科03-16
...............
13003-16本科14000本科03-16
13103-16硕士37500硕士03-16
13203-16本科30000本科03-16
13303-16本科19000本科03-16
13403-16本科30000本科03-16

135 rows × 4 columns

36.将education列与salary列合并为新的一列

# salary为int类型,操作与35题有所不同
df["test1"] = df["salary"].map(str) + df['education']
df
createTimeeducationsalarytesttest1
003-16本科27500本科03-1627500本科
103-16本科30000本科03-1630000本科
203-16不限27500不限03-1627500不限
303-16本科16500本科03-1616500本科
403-16本科15000本科03-1615000本科
..................
13003-16本科14000本科03-1614000本科
13103-16硕士37500硕士03-1637500硕士
13203-16本科30000本科03-1630000本科
13303-16本科19000本科03-1619000本科
13403-16本科30000本科03-1630000本科

135 rows × 5 columns

37.计算salary最大值与最小值之差

df[['salary']].apply(lambda x: x.max() - x.min())
salary    41500
dtype: int64

38.将第一行与最后一行拼接

pd.concat([df[:1], df[-2:-1]])
createTimeeducationsalarytesttest1
003-16本科27500本科03-1627500本科
13303-16本科19000本科03-1619000本科

39.将第8行数据添加至末尾¶

df.append(df.iloc[7])
createTimeeducationsalarytesttest1
003-16本科27500本科03-1627500本科
103-16本科30000本科03-1630000本科
203-16不限27500不限03-1627500不限
303-16本科16500本科03-1616500本科
403-16本科15000本科03-1615000本科
..................
13103-16硕士37500硕士03-1637500硕士
13203-16本科30000本科03-1630000本科
13303-16本科19000本科03-1619000本科
13403-16本科30000本科03-1630000本科
703-16本科12500本科03-1612500本科

136 rows × 5 columns

40.查看每列的数据类型¶

df.dtypes
createTime    object
education     object
salary         int64
test          object
test1         object
dtype: object

41.将createTime列设置为索引

df.set_index("createTime")
educationsalarytesttest1
createTime
03-16本科27500本科03-1627500本科
03-16本科30000本科03-1630000本科
03-16不限27500不限03-1627500不限
03-16本科16500本科03-1616500本科
03-16本科15000本科03-1615000本科
...............
03-16本科14000本科03-1614000本科
03-16硕士37500硕士03-1637500硕士
03-16本科30000本科03-1630000本科
03-16本科19000本科03-1619000本科
03-16本科30000本科03-1630000本科

135 rows × 4 columns

42.生成一个和df长度相同的随机数dataframe

df1 = pd.DataFrame(pd.Series(np.random.randint(1, 10,len(df))))
df1
0
04
11
25
34
48
......
1305
1314
1324
1334
1346

135 rows × 1 columns

43.将上一题生成的dataframe与df合并

df= pd.concat([df,df1],axis=1)
df
createTimeeducationsalarytesttest10
003-16本科27500本科03-1627500本科4
103-16本科30000本科03-1630000本科1
203-16不限27500不限03-1627500不限5
303-16本科16500本科03-1616500本科4
403-16本科15000本科03-1615000本科8
.....................
13003-16本科14000本科03-1614000本科5
13103-16硕士37500硕士03-1637500硕士4
13203-16本科30000本科03-1630000本科4
13303-16本科19000本科03-1619000本科4
13403-16本科30000本科03-1630000本科6

135 rows × 6 columns

44.生成新的一列new为salary列减去之前生成随机数列

df["new"] = df["salary"] - df[0]
df
createTimeeducationsalarytesttest10new
003-16本科27500本科03-1627500本科427496
103-16本科30000本科03-1630000本科129999
203-16不限27500不限03-1627500不限527495
303-16本科16500本科03-1616500本科416496
403-16本科15000本科03-1615000本科814992
........................
13003-16本科14000本科03-1614000本科513995
13103-16硕士37500硕士03-1637500硕士437496
13203-16本科30000本科03-1630000本科429996
13303-16本科19000本科03-1619000本科418996
13403-16本科30000本科03-1630000本科629994

135 rows × 7 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>10000])
119

48.查看每种学历出现的次数

df.education.value_counts()
本科    119
硕士      7
不限      5
大专      4
Name: education, dtype: int64

49.查看education列共有几种学历¶

df.education.nunique()
4

50.提取salary与new列的和大于60000的最后3行

# 方法一:
df[(df.salary+df.new>60000)].tail(3)
createTimeeducationsalarytesttest10new
9203-16本科35000本科03-1635000本科834992
10103-16本科37500本科03-1637500本科237498
13103-16硕士37500硕士03-1637500硕士437496
#方法二:
df1 = df[['salary','new']]
rowsums = df1.apply(np.sum, axis=1)
res = df.iloc[np.where(rowsums > 60000)[0][-3:], :]
res
createTimeeducationsalarytesttest10new
9203-16本科35000本科03-1635000本科834992
10103-16本科37500本科03-1637500本科237498
13103-16硕士37500硕士03-1637500硕士437496

3.金融数据处理

51.使用绝对路径读取本地Excel数据

data = pd.read_excel("pandas120/51-80数据.xls")

52.查看数据前三行

data.head(3)
代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率
0600000.SH浦发银行2016-01-0416.135616.144416.144415.499715.720542240610754425783-0.4151-2.572517.86020.22643.320318e+113.320318e+111.865347e+106.5614
1600000.SH浦发银行2016-01-0515.720515.464415.950115.367215.86185805479310341814740.14130.898917.81390.31123.350163e+113.350163e+111.865347e+106.6204
2600000.SH浦发银行2016-01-0615.861815.808816.020815.623415.9855467726538386673980.12360.779517.93070.25073.376278e+113.376278e+111.865347e+106.6720

53.查看每列数据缺失值情况

# 每一列的缺失个数
data.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.提取日期列含有空值的行

data[data['日期'].isnull()]
代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率
327NaNNaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
328数据来源:Wind资讯NaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

55.输出每列缺失值具体行数

for columname in data.columns:
    if data[columname].count() != len(data):
        loc = data[columname][data[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.dropna(axis=0, how='any', inplace=True)
data.isnull().sum()
代码           0
简称           0
日期           0
前收盘价(元)      0
开盘价(元)       0
最高价(元)       0
最低价(元)       0
收盘价(元)       0
成交量(股)       0
成交金额(元)      0
涨跌(元)        0
涨跌幅(%)       0
均价(元)        0
换手率(%)       0
A股流通市值(元)    0
总市值(元)       0
A股流通股本(股)    0
市盈率          0
dtype: int64

57.绘制收盘价的折线图

plt.style.use('seaborn-darkgrid') # 设置画图的风格
plt.rc('font',  size=6) #设置图中字体和大小
plt.rc('figure', figsize=(4,3), dpi=150) # 设置图的大小
data['收盘价(元)'].plot();

在这里插入图片描述

plt.style.use('seaborn-darkgrid') # 设置画图的风格
plt.rc('font',size=8) #设置图中字体和大小
plt.rc('figure', figsize=(4,3), dpi=180) # 设置图的大小
# data['收盘价(元)'].plot()
plt.plot(data['收盘价(元)']);

在这里插入图片描述

58.同时绘制开盘价与收盘价¶

plt.rcParams['font.sans-serif']=['Simhei']  #显示中文
plt.rcParams['axes.unicode_minus']=False    #设置显示中文后,负号显示受影响,显示负号  
data[['收盘价(元)','开盘价(元)']].plot();

在这里插入图片描述

59.绘制涨跌幅的直方图

plt.title('涨跌幅直方图')
plt.hist(data['涨跌幅(%)']);
# 等价于
# df['涨跌幅(%)'].hist()

在这里插入图片描述

60.让直方图更细致

data['涨跌幅(%)'].hist(bins = 30);

在这里插入图片描述

61.以data的列名创建一个dataframe

temp = pd.DataFrame(columns = data.columns.to_list())
temp
代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)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股流通股本(股)市盈率
26600000.SH浦发银行2016-02-1616.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
27600000.SH浦发银行2016-02-1716.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
28600000.SH浦发银行2016-02-1816.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
29600000.SH浦发银行2016-02-1916.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
30600000.SH浦发银行2016-02-2216.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
31600000.SH浦发银行2016-02-2316.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
32600000.SH浦发银行2016-02-2416.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
33600000.SH浦发银行2016-02-2516.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
34600000.SH浦发银行2016-02-2616.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
35600000.SH浦发银行2016-02-2916.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
36600000.SH浦发银行2016-03-0116.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
37600000.SH浦发银行2016-03-0216.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
38600000.SH浦发银行2016-03-0316.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
39600000.SH浦发银行2016-03-0416.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
40600000.SH浦发银行2016-03-0716.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
41600000.SH浦发银行2016-03-0816.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
42600000.SH浦发银行2016-03-0916.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
43600000.SH浦发银行2016-03-1016.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801

63.打印所有换手率为–的行

data[data['换手率(%)'].isin(['--'])]
代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率
26600000.SH浦发银行2016-02-1616.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
27600000.SH浦发银行2016-02-1716.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
28600000.SH浦发银行2016-02-1816.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
29600000.SH浦发银行2016-02-1916.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
30600000.SH浦发银行2016-02-2216.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
31600000.SH浦发银行2016-02-2316.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
32600000.SH浦发银行2016-02-2416.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
33600000.SH浦发银行2016-02-2516.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
34600000.SH浦发银行2016-02-2616.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
35600000.SH浦发银行2016-02-2916.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
36600000.SH浦发银行2016-03-0116.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
37600000.SH浦发银行2016-03-0216.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
38600000.SH浦发银行2016-03-0316.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
39600000.SH浦发银行2016-03-0416.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
40600000.SH浦发银行2016-03-0716.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
41600000.SH浦发银行2016-03-0816.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
42600000.SH浦发银行2016-03-0916.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.801
43600000.SH浦发银行2016-03-1016.294616.294616.294616.294616.2946----0.00.0----3.441565e+113.441565e+111.865347e+106.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');

在这里插入图片描述

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.head()
index代码简称前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率
日期
2016-01-040600000.SH浦发银行16.135616.144416.144415.499715.720542240610754425783-0.4151-2.572517.86020.22643.320318e+113.320318e+111.865347e+106.5614
2016-01-051600000.SH浦发银行15.720515.464415.950115.367215.86185805479310341814740.14130.898917.81390.31123.350163e+113.350163e+111.865347e+106.6204
2016-01-062600000.SH浦发银行15.861815.808816.020815.623415.9855467726538386673980.12360.779517.93070.25073.376278e+113.376278e+111.865347e+106.6720
2016-01-073600000.SH浦发银行15.985515.720515.808815.367215.464411350479199502702-0.5211-3.259717.57660.06083.266223e+113.266223e+111.865347e+106.4545
2016-01-084600000.SH浦发银行15.464415.667515.791214.934515.4467719182961262105060-0.0177-0.114217.54920.38553.262492e+113.262492e+111.865347e+106.4471

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();

在这里插入图片描述

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();

在这里插入图片描述

75.将数据往后移动5天

data.shift(5)
index代码简称前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率
日期
2016-01-04NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2016-01-05NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2016-01-06NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2016-01-07NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2016-01-08NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
.........................................................
2017-05-03317.0600000.SH浦发银行15.0015.0215.1014.9915.05129759191952968620.050.333315.05070.063.253551e+113.253551e+112.161828e+106.1273
2017-05-04318.0600000.SH浦发银行15.0515.0615.1115.0015.05149398712250226680.000.000015.06190.06913.253551e+113.253551e+112.161828e+106.1273
2017-05-05319.0600000.SH浦发银行15.0515.0515.2515.0315.21228876453457915260.161.063115.10820.10593.288140e+113.288140e+112.161828e+106.1925
2017-05-08320.0600000.SH浦发银行15.2115.1515.2215.0815.21157185092384191610.000.000015.16810.07273.288140e+113.288140e+112.161828e+106.1925
2017-05-09321.0600000.SH浦发银行15.2115.2115.2215.1315.1612607509191225527-0.05-0.328715.16760.05833.277331e+113.277331e+112.161828e+106.1721

309 rows × 18 columns

76.将数据向前移动5天

data.shift(-5)
index代码简称前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率
日期
2016-01-045.0600000.SH浦发银行15.446715.199415.411414.978615.0581901771351550155933-0.3886-2.515717.19010.48343.180417e+113.180417e+111.865347e+106.2849
2016-01-056.0600000.SH浦发银行15.058115.164115.473215.084615.4114553744549640615020.35332.346017.40990.29693.255031e+113.255031e+111.865347e+106.4324
2016-01-067.0600000.SH浦发银行15.411415.517415.808815.323115.358447869312843717365-0.0530-0.343817.62540.25663.243839e+113.243839e+111.865347e+106.4102
2016-01-078.0600000.SH浦发银行15.358415.014015.888314.916815.8265548388339661178480.46813.047717.61740.2943.342702e+113.342702e+111.865347e+106.6056
2016-01-089.0600000.SH浦发银行15.826515.720516.029615.473215.526246723139836146426-0.3003-1.897317.89580.25053.279280e+113.279280e+111.865347e+106.4803
.........................................................
2017-05-03NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2017-05-04NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2017-05-05NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2017-05-08NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2017-05-09NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

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));

在这里插入图片描述

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()#在这里我们取20天内的标准差
data['lower bound']=data['former 30 days rolling Close mean']-2*data['收盘价(元)'].rolling(20).std()
data
index代码简称前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)...均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率expanding Open meanformer 30 days rolling Close meanupper boundlower bound
日期
2016-01-040600000.SH浦发银行16.135616.144416.144415.499715.720542240610754425783...17.86020.22643.320318e+113.320318e+111.865347e+106.561416.144400NaNNaNNaN
2016-01-051600000.SH浦发银行15.720515.464415.950115.367215.8618580547931034181474...17.81390.31123.350163e+113.350163e+111.865347e+106.620415.804400NaNNaNNaN
2016-01-062600000.SH浦发银行15.861815.808816.020815.623415.985546772653838667398...17.93070.25073.376278e+113.376278e+111.865347e+106.672015.805867NaNNaNNaN
2016-01-073600000.SH浦发银行15.985515.720515.808815.367215.464411350479199502702...17.57660.06083.266223e+113.266223e+111.865347e+106.454515.784525NaNNaNNaN
2016-01-084600000.SH浦发银行15.464415.667515.791214.934515.4467719182961262105060...17.54920.38553.262492e+113.262492e+111.865347e+106.447115.761120NaNNaNNaN
..................................................................
2017-05-03322600000.SH浦发银行15.160015.160015.160015.050015.080014247943215130847...15.09910.06593.260037e+113.260037e+112.161828e+106.139516.04148915.453016.31879714.587203
2017-05-04323600000.SH浦发银行15.080015.070015.070014.900014.980019477788291839737...14.98320.09013.238418e+113.238418e+112.161828e+106.098816.03831415.394016.21668914.571311
2017-05-05324600000.SH浦发银行14.980014.950014.980014.520014.920040194577592160198...14.73230.18593.225447e+113.225447e+112.161828e+106.074416.03476915.335016.11251314.557487
2017-05-08325600000.SH浦发银行14.920014.780014.900014.510014.860043568576638781010...14.66150.20153.212476e+113.212476e+112.161828e+106.050016.03069515.273015.98898614.557014
2017-05-09326600000.SH浦发银行14.860014.690014.840014.660014.760019225492283864640...14.7650.08893.190858e+113.190858e+112.161828e+106.009316.02635615.212515.88358314.541417

309 rows × 22 columns

80.计算布林线并绘制

data[['收盘价(元)', 'former 30 days rolling Close mean','upper bound','lower bound' ]].plot(figsize=(16, 6));

在这里插入图片描述

4.当pandas遇上Numpy

81.查看pandas与numpy版本

import pandas as pd
import numpy as np
print(np.__version__)
print(pd.__version__)
1.16.5
0.25.3

82.使用numpy生成20个0-100随机数构成df

#使用numpy生成20个0-100随机数
tem = np.random.randint(1,100,20)
df1 = pd.DataFrame(tem)
df1
0
052
142
226
370
411
590
66
766
890
92
1067
1140
1268
1326
1422
1549
1663
1769
1821
195

83.使用numpy生成20个0-100固定步长的数

#使用numpy生成20个0-100固定步长的数
tem = np.arange(0,100,5)
df2 = pd.DataFrame(tem)
df2
0
00
15
210
315
420
525
630
735
840
945
1050
1155
1260
1365
1470
1575
1680
1785
1890
1995

84.使用numpy生成20个指定分布(如标准正态分布)的数

tem = np.random.normal(0, 1, 20)
df3 = pd.DataFrame(tem)
df3
0
0-1.046510
10.112247
20.063541
31.561601
40.271020
5-0.054702
60.949461
7-1.594941
8-1.410419
9-0.166459
10-0.404137
111.395874
120.717067
130.228148
140.348453
15-0.301339
161.738995
171.235685
18-0.205439
190.804149

85.将df1,df2,df3按照行合并为新DataFrame

df = pd.concat([df1,df2,df3],axis=0,ignore_index=True)
df
0
052.000000
142.000000
226.000000
370.000000
411.000000
590.000000
66.000000
766.000000
890.000000
92.000000
1067.000000
1140.000000
1268.000000
1326.000000
1422.000000
1549.000000
1663.000000
1769.000000
1821.000000
195.000000
200.000000
215.000000
2210.000000
2315.000000
2420.000000
2525.000000
2630.000000
2735.000000
2840.000000
2945.000000
3050.000000
3155.000000
3260.000000
3365.000000
3470.000000
3575.000000
3680.000000
3785.000000
3890.000000
3995.000000
40-1.046510
410.112247
420.063541
431.561601
440.271020
45-0.054702
460.949461
47-1.594941
48-1.410419
49-0.166459
50-0.404137
511.395874
520.717067
530.228148
540.348453
55-0.301339
561.738995
571.235685
58-0.205439
590.804149

86.将df1,df2,df3按照列合并为新DataFrame

df = pd.concat([df1,df2,df3],axis=1,ignore_index=True)
df
012
0520-1.046510
14250.112247
226100.063541
370151.561601
411200.271020
59025-0.054702
66300.949461
76635-1.594941
89040-1.410419
9245-0.166459
106750-0.404137
1140551.395874
1268600.717067
1326650.228148
1422700.348453
154975-0.301339
1663801.738995
1769851.235685
182190-0.205439
195950.804149

87.查看df所有数据的最小值、25%分位数、中位数、75%分位数、最大值

np.percentile(df, q=[0, 25, 50, 75, 100])
array([-1.59494057,  0.78237889, 21.5       , 60.75      , 95.        ])

88.修改列名为col1,col2,col3

df.columns = ['col1','col2','col3']

89.提取第一列中不在第二列出现的数字

df['col1'][~df['col1'].isin(df['col2'])]
0     52
1     42
2     26
4     11
6      6
7     66
9      2
10    67
12    68
13    26
14    22
15    49
16    63
17    69
18    21
Name: col1, dtype: int32

90.提取第一列和第二列出现频率最高的三个数字

temp = df['col1'].append(df['col2'])
temp.value_counts().index[:3]
Int64Index([90, 26, 40], dtype='int64')

91.提取第一列中可以整除5的数字位置

np.argwhere(df['col1']%5==0)
D:\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py:56: FutureWarning: Series.nonzero() is deprecated and will be removed in a future version.Use Series.to_numpy().nonzero() instead
  return getattr(obj, method)(*args, **kwds)





array([[ 3],
       [ 5],
       [ 8],
       [11],
       [19]], dtype=int64)
df[df['col1']%5==0].index.tolist()
[3, 5, 8, 11, 19]

92.计算第一列数字前一个与后一个的差值

df['col1'].diff().tolist()
[nan,
 -10.0,
 -16.0,
 44.0,
 -59.0,
 79.0,
 -84.0,
 60.0,
 24.0,
 -88.0,
 65.0,
 -27.0,
 28.0,
 -42.0,
 -4.0,
 27.0,
 14.0,
 6.0,
 -48.0,
 -16.0]

93.将col1,col2,clo3三列顺序颠倒¶

df.ix[:,::-1]
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated
  """Entry point for launching an IPython kernel.
D:\Anaconda3\lib\site-packages\pandas\core\indexing.py:822: FutureWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated
  retval = getattr(retval, self.name)._getitem_axis(key, axis=i)
col3col2col1
0-1.046510052
10.112247542
20.0635411026
31.5616011570
40.2710202011
5-0.0547022590
60.949461306
7-1.5949413566
8-1.4104194090
9-0.166459452
10-0.4041375067
111.3958745540
120.7170676068
130.2281486526
140.3484537022
15-0.3013397549
161.7389958063
171.2356858569
18-0.2054399021
190.804149955
df.iloc[:,::-1]
col3col2col1
0-1.046510052
10.112247542
20.0635411026
31.5616011570
40.2710202011
5-0.0547022590
60.949461306
7-1.5949413566
8-1.4104194090
9-0.166459452
10-0.4041375067
111.3958745540
120.7170676068
130.2281486526
140.3484537022
15-0.3013397549
161.7389958063
171.2356858569
18-0.2054399021
190.804149955
df.loc[:,df.columns.values.tolist()[::-1]]
col3col2col1
0-1.046510052
10.112247542
20.0635411026
31.5616011570
40.2710202011
5-0.0547022590
60.949461306
7-1.5949413566
8-1.4104194090
9-0.166459452
10-0.4041375067
111.3958745540
120.7170676068
130.2281486526
140.3484537022
15-0.3013397549
161.7389958063
171.2356858569
18-0.2054399021
190.804149955

94.提取第一列位置在1,10,15的数字

df.iloc[[1,10,15],0]
1     42
10    67
15    49
Name: col1, dtype: int32
df['col1'].take([1,10,15])
1     42
10    67
15    49
Name: col1, dtype: int32

95.查找第一列的局部最大值位置

# 即比它前一个与后一个数字的都大的数字
tem = np.diff(np.sign(np.diff(df['col1'])))
np.where(tem == -2)[0] + 1
array([ 3,  5,  8, 10, 12, 17], dtype=int64)
df['col1']
0     52
1     42
2     26
3     70
4     11
5     90
6      6
7     66
8     90
9      2
10    67
11    40
12    68
13    26
14    22
15    49
16    63
17    69
18    21
19     5
Name: col1, dtype: int32
np.diff(df['col1'])
array([-10, -16,  44, -59,  79, -84,  60,  24, -88,  65, -27,  28, -42,
        -4,  27,  14,   6, -48, -16])
np.sign(np.diff(df['col1']))
array([-1, -1,  1, -1,  1, -1,  1,  1, -1,  1, -1,  1, -1, -1,  1,  1,  1,
       -1, -1])
np.diff(np.sign(np.diff(df['col1'])))
array([ 0,  2, -2,  2, -2,  2,  0, -2,  2, -2,  2, -2,  0,  2,  0,  0, -2,
        0])

96.按行计算df的每一行均值

df.mean(axis=1)
0     16.984497
1     15.704082
2     12.021180
3     28.853867
4     10.423673
5     38.315099
6     12.316487
7     33.135020
8     42.863194
9     15.611180
10    38.865288
11    32.131958
12    42.905689
13    30.409383
14    30.782818
15    41.232887
16    48.246332
17    51.745228
18    36.931520
19    33.601383
dtype: float64
df[['col1','col2','col3']].mean(axis=1)
0     16.984497
1     15.704082
2     12.021180
3     28.853867
4     10.423673
5     38.315099
6     12.316487
7     33.135020
8     42.863194
9     15.611180
10    38.865288
11    32.131958
12    42.905689
13    30.409383
14    30.782818
15    41.232887
16    48.246332
17    51.745228
18    36.931520
19    33.601383
dtype: float64

97.对第二列计算移动平均值

df['col2']
0      0
1      5
2     10
3     15
4     20
5     25
6     30
7     35
8     40
9     45
10    50
11    55
12    60
13    65
14    70
15    75
16    80
17    85
18    90
19    95
Name: col2, dtype: int32
#每次移动三个位置,不可以使用自定义函数
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
col1col2col3
76635-1.594941
89040-1.410419
0520-1.046510
106750-0.404137
154975-0.301339
182190-0.205439
9245-0.166459
59025-0.054702
226100.063541
14250.112247
1326650.228148
411200.271020
1422700.348453
1268600.717067
195950.804149
66300.949461
1769851.235685
1140551.395874
370151.561601
1663801.738995

99.将第一列大于50的数字修改为’高’

df.col1[df['col1'] > 50]= '高'
df
col1col2col3
735-1.594941
840-1.410419
00-1.046510
1050-0.404137
154975-0.301339
182190-0.205439
9245-0.166459
525-0.054702
226100.063541
14250.112247
1326650.228148
411200.271020
1422700.348453
12600.717067
195950.804149
66300.949461
17851.235685
1140551.395874
3151.561601
16801.738995

100.计算第二列与第三列之间的欧式距离

np.linalg.norm(df['col2']-df['col3'])
247.09477496805883

5.其他操作

101.从CSV文件中读取指定数据

# 从数据1中的前10行中读取positionName, salary两列
# usecols 设置导入的列
# encoding 解码方式
# nrows 导入的行数
df = pd.read_csv('pandas120/数据1_101-120涉及.csv',encoding='gbk', usecols=['positionName', 'salary'],nrows = 10)
df
positionNamesalary
0数据分析37500
1数据建模15000
2数据分析3500
3数据分析45000
4数据分析30000
5数据分析50000
6数据分析30000
7数据建模工程师35000
8数据分析专家60000
9数据分析师40000

102.从CSV文件中读取指定数据

# 从数据2中读取数据并在读取数据时将薪资大于10000的为改为高
df = pd.read_csv('E:/桌面/为了工作/面试题/pandas120/数据2_101-120涉及.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
01.462932e-08
16.941200e-01
21.455299e-09
31.857895e-04
42.401570e-09
57.926270e-01
67.644857e-03
72.117843e-02
82.422171e-02
91.510634e-01
df.round(3)
data
00.000
10.694
20.000
30.000
40.000
50.793
60.008
70.021
80.024
90.151

105.将上一题的数据转换为百分数

df.style.format({'data': '{0:.2%}'.format})
            <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row0" class="row_heading level0 row0" >0</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row0_col0" class="data row0 col0" >0.00%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row1" class="row_heading level0 row1" >1</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row1_col0" class="data row1 col0" >69.41%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row2" class="row_heading level0 row2" >2</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row2_col0" class="data row2 col0" >0.00%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row3" class="row_heading level0 row3" >3</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row3_col0" class="data row3 col0" >0.02%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row4" class="row_heading level0 row4" >4</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row4_col0" class="data row4 col0" >0.00%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row5" class="row_heading level0 row5" >5</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row5_col0" class="data row5 col0" >79.26%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row6" class="row_heading level0 row6" >6</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row6_col0" class="data row6 col0" >0.76%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row7" class="row_heading level0 row7" >7</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row7_col0" class="data row7 col0" >2.12%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row8" class="row_heading level0 row8" >8</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row8_col0" class="data row8 col0" >2.42%</td>
        </tr>
        <tr>
                    <th id="T_8ad8d580_8633_11ea_9800_f834414b6977level0_row9" class="row_heading level0 row9" >9</th>
                    <td id="T_8ad8d580_8633_11ea_9800_f834414b6977row9_col0" class="data row9 col0" >15.11%</td>
        </tr>
</tbody></table>
data

106.查找数据中第3大值的行号

temp= pd.DataFrame(np.random.randint(1,30,15),columns=['a'])
temp
a
04
18
215
35
43
528
614
717
826
96
109
116
1220
1313
1413
temp['a'].argsort()[::-1].values.tolist()[2]
12

107.反转df的行

df.iloc[::-1, :]
data
91.510634e-01
82.422171e-02
72.117843e-02
67.644857e-03
57.926270e-01
42.401570e-09
31.857895e-04
21.455299e-09
16.941200e-01
01.462932e-08

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']})
df1
df2
key1key2AB
0K0K0A0B0
1K0K1A1B1
2K1K0A2B2
3K2K1A3B3
key1key2CD
0K0K0C0D0
1K1K0C1D1
2K1K0C2D2
3K2K0C3D3
# 默认是内连接
pd.merge(df1,df2,on=['key1','key2'])
key1key2ABCD
0K0K0A0B0C0D0
1K1K0A2B2C1D1
2K1K0A2B2C2D2

109.按照多列对数据进行合并(左连接)

pd.merge(df1, df2, how='left', on=['key1', 'key2'])
key1key2ABCD
0K0K0A0B0C0D0
1K0K1A1B1NaNNaN
2K1K0A2B2C1D1
3K1K0A2B2C2D2
4K2K1A3B3NaNNaN

110.再次读取数据1并显示所有的列

df = pd.read_csv('pandas120/数据1_101-120涉及.csv',encoding='gbk')
pd.set_option("display.max.columns", None)
df
positionIdpositionNamecompanyIdcompanyLogocompanySizeindustryFieldfinanceStagecompanyLabelListfirstTypesecondTypethirdTypeskillLablespositionLablesindustryLablescreateTimeformatCreateTimedistrictbusinessZonessalaryworkYearjobNatureeducationpositionAdvantageimStatelastLoginpublisherIdapprovesubwaylinestationnamelinestaionlatitudelongitudehitagsresumeProcessRateresumeProcessDayscorenewScorematchScorematchScoreExplainqueryexplainisSchoolJobadWordpluspcShowappShowdelivergradeDescriptionpromotionScoreExplainisHotHirecountaggregatePositionIdsfamousCompany
06802721数据分析475770i/image2/M01/B7/3E/CgoB5lwPfEaAdn8WAABWQ0Jgl5s...50-150人移动互联网,电商A轮['绩效奖金', '带薪年假', '定期体检', '弹性工作']产品|需求|项目类数据分析数据分析['SQL', '数据库', '数据运营', 'BI']['电商', '社交', 'SQL', '数据库', '数据运营', 'BI']['电商', '社交', 'SQL', '数据库', '数据运营', 'BI']2020/3/16 11:0011:00发布余杭区['仓前']375001-3年全职本科五险一金、弹性工作、带薪年假、年度体检today2020/3/16 11:00120224061NaNNaNNaN30.278421120.005922NaN501233015.101875NaNNaNNaN00NaN000NaNNaN00[]False
15204912数据建模50735image1/M00/00/85/CgYXBlTUXeeAR0IjAABbroUk-dw97...150-500人电商B轮['年终奖金', '做五休二', '六险一金', '子女福利']开发|测试|运维类数据开发建模['算法', '数据架构']['算法', '数据架构'][]2020/3/16 11:0811:08发布滨江区['西兴', '长河']150003-5年全职本科六险一金,定期体检,丰厚年终disabled2020/3/16 11:0854916881NaNNaNNaN30.188041120.201179NaN231176032.559414NaNNaNNaN00NaN000NaNNaN00[]False
26877668数据分析100125image2/M00/0C/57/CgqLKVYcOA2ADcFuAAAE8MukIKA74...2000人以上移动互联网,企业服务上市公司['节日礼物', '年底双薪', '股票期权', '带薪年假']产品|需求|项目类数据分析数据分析['数据库', '数据分析', 'SQL']['数据库', 'SQL'][]2020/3/16 10:3310:33发布江干区['四季青', '钱江新城']35001-3年全职本科五险一金 周末双休 不加班 节日福利today2020/3/16 10:33532258314号线江锦路4号线_城星路;4号线_市民中心;4号线_江锦路30.241521120.212539NaN11480014.972357NaNNaNNaN00NaN000NaNNaN00[]False
36496141数据分析26564i/image2/M01/F7/3F/CgoB5lyGAQGAZeI-AAAdOqXecnw...500-2000人电商D轮及以上['生日趴', '每月腐败基金', '每月补贴', '年度旅游']开发|测试|运维类数据开发数据分析[]['电商']['电商']2020/3/16 10:1010:10发布江干区NaN450003-5年全职本科年终奖等threeDays2020/3/16 10:10981456011号线文泽路1号线_文泽路30.299404120.350304NaN100168012.874153NaNNaNNaN00NaN000NaNNaN00[]True
46467417数据分析29211i/image2/M01/77/B8/CgoB5l1WDyGATNP5AAAlY3h88SY...2000人以上物流丨运输上市公司['技能培训', '免费班车', '专项奖金', '岗位晋升']产品|需求|项目类数据分析数据分析['BI', '数据分析', '数据运营']['BI', '数据运营'][]2020/3/16 09:5609:56发布余杭区['仓前']300003-5年全职大专五险一金disabled2020/3/16 09:5663923941NaNNaNNaN30.282952120.009765NaN20166012.755375NaNNaNNaN00NaN000NaNNaN00[]True
..................................................................................................................................................................
1006884346数据分析师21236i/image/M00/43/F6/CgqKkVeEh76AUVPoAAA2Bj747wU6...500-2000人移动互联网,医疗丨健康C轮['技能培训', '年底双薪', '节日礼物', '绩效奖金']产品|需求|项目类数据分析数据分析['数据库', '商业', '数据分析', 'SQL']['医疗健康', '数据库', '商业', '数据分析', 'SQL']['医疗健康', '数据库', '商业', '数据分析', 'SQL']2020/3/11 16:452020/3/11萧山区NaN250003-5年全职不限大牛老板,开放环境,民生行业,龙头公司threeDays2020/3/16 09:4916651671NaNNaNNaN30.203078120.247069NaN961000.314259NaNNaNNaN00NaN000NaNNaN00[]False
1016849100商业数据分析72076i/image2/M01/92/A4/CgotOV2LPUmAR_8dAAB_DlDMiXA...500-2000人移动互联网,电商C轮['节日礼物', '股票期权', '带薪年假', '年度旅游']市场|商务类市场|营销商业数据分析['市场', '数据分析', '行业分析', '市场分析']['电商', '市场', '数据分析', '行业分析', '市场分析']['电商', '市场', '数据分析', '行业分析', '市场分析']2020/3/14 17:382天前发布余杭区NaN350001-3年全职硕士五险一金、带薪休假threeDays2020/3/14 17:3817324161NaNNaNNaN30.276694119.990918NaN23000.283276NaNNaNNaN00NaN000NaNNaN00[]False
1026803432奔驰·耀出行-BI数据分析专家751158i/image3/M01/64/93/Cgq2xl48z2mAeYRoAAD6Qf_Jeq8...150-500人移动互联网不需要融资[]开发|测试|运维类数据开发数据分析['MySQL', '数据处理', '数据分析']['MySQL', '数据处理', '数据分析'][]2020/3/14 22:392天前发布滨江区['西兴']300003-5年全职本科奔驰 吉利 世界500强threeDays2020/3/14 22:39478564311号线滨和路1号线_滨和路;1号线_江陵路;1号线_滨和路;1号线_江陵路30.208562120.219225NaN631000.256719NaNNaNNaN00NaN000NaNNaN00[]False
1036704835BI数据分析师52840i/image2/M00/26/CA/CgoB5lofsguAfk9ZAACoL3r4p24...2000人以上电商上市公司['技能培训', '年底双薪', '节日礼物', '绩效奖金']开发|测试|运维类数据开发数据分析['SQLServer', '数据分析']['电商', '新零售', 'SQLServer', '数据分析']['电商', '新零售', 'SQLServer', '数据分析']2020/3/9 15:002020/3/9余杭区['仓前']200003-5年全职本科阿里巴巴;商业智能;threeDays2020/3/16 10:1558463501NaNNaNNaN30.280177120.023521['16薪', '一年调薪2次']00000.281062NaNNaNNaN00NaN000NaNNaN00[]True
1046728058数据分析专家-LQ(J181203029)2474i/image2/M01/14/4D/CgoB5lyq5fqAAHHzAAAa148hbk8...2000人以上汽车丨出行不需要融资['弹性工作', '节日礼物', '岗位晋升', '技能培训']产品|需求|项目类数据分析其他数据分析[]['滴滴']['滴滴']2020/3/13 18:243天前发布西湖区NaN215005-10年全职本科广阔平台诱人福利disabled2020/3/13 19:5167994951NaNNaNNaN30.290746120.074315NaN00000.159343NaNNaNNaN00NaN000NaNNaN00[]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.查找薪资大于平均薪资的第三个数据

np.argwhere(df['salary'] > df['salary'].mean())[2]
array([5], dtype=int64)

113.将上一题数据的salary列开根号

df[['salary']].apply(np.sqrt)
salary
0193.649167
1122.474487
259.160798
3212.132034
4173.205081
......
100158.113883
101187.082869
102173.205081
103141.421356
104146.628783

105 rows × 1 columns

114.将数据的linestaion列按_拆分

df['split'] = df['linestaion'].str.split('_')
df['split']
0                                        NaN
1                                        NaN
2              [4号线, 城星路;4号线, 市民中心;4号线, 江锦路]
3                                 [1号线, 文泽路]
4                                        NaN
                       ...                  
100                                      NaN
101                                      NaN
102    [1号线, 滨和路;1号线, 江陵路;1号线, 滨和路;1号线, 江陵路]
103                                      NaN
104                                      NaN
Name: split, Length: 105, dtype: object

115.查看数据中一共有多少列

df.shape[1]
54

116.提取industryField列以’数据’开头的行

#df[df['industryField'].str.startswith('数据')]
df[df.industryField.str.startswith('数据')]
positionIdpositionNamecompanyIdcompanyLogocompanySizeindustryFieldfinanceStagecompanyLabelListfirstTypesecondTypethirdTypeskillLablespositionLablesindustryLablescreateTimeformatCreateTimedistrictbusinessZonessalaryworkYearjobNatureeducationpositionAdvantageimStatelastLoginpublisherIdapprovesubwaylinestationnamelinestaionlatitudelongitudehitagsresumeProcessRateresumeProcessDayscorenewScorematchScorematchScoreExplainqueryexplainisSchoolJobadWordpluspcShowappShowdelivergradeDescriptionpromotionScoreExplainisHotHirecountaggregatePositionIdsfamousCompanysplit
86458372数据分析专家34132i/image2/M01/F8/DE/CgoB5lyHTJeAP7v9AAFXUt4zJo4...150-500人数据服务,广告营销A轮['开放式办公', '扁平管理', '带薪假期', '弹性工作时间']产品|需求|项目类数据分析其他数据分析['数据分析', '数据运营']['电商', '广告营销', '数据分析', '数据运营']['电商', '广告营销', '数据分析', '数据运营']2020/3/16 10:5710:57发布余杭区NaN600005-10年全职本科六险一金、境内外旅游、带薪年假、培训发展today2020/3/16 09:5175425461NaNNaNNaN30.281850120.015690NaN8312401.141952NaNNaNNaN00NaN000NaNNaN00[]FalseNaN
106804629数据分析师34132i/image2/M01/F8/DE/CgoB5lyHTJeAP7v9AAFXUt4zJo4...150-500人数据服务,广告营销A轮['开放式办公', '扁平管理', '带薪假期', '弹性工作时间']产品|需求|项目类数据分析数据分析['数据分析']['电商', '广告营销', '数据分析']['电商', '广告营销', '数据分析']2020/3/16 10:5710:57发布余杭区NaN30000不限全职本科六险一金 旅游 带薪年假 培训发展 双休today2020/3/16 09:5175425461NaNNaNNaN30.281850120.015690NaN8311701.161869NaNNaNNaN00NaN000NaNNaN00[]FalseNaN
136804489资深数据分析师34132i/image2/M01/F8/DE/CgoB5lyHTJeAP7v9AAFXUt4zJo4...150-500人数据服务,广告营销A轮['开放式办公', '扁平管理', '带薪假期', '弹性工作时间']开发|测试|运维类数据开发数据分析['数据分析']['电商', '数据分析']['电商', '数据分析']2020/3/16 10:5710:57发布余杭区NaN300003-5年全职本科六险一金 旅游 带薪年假 培训发展 双休today2020/3/16 09:5175425461NaNNaNNaN30.281850120.015690NaN8311601.075559NaNNaNNaN00NaN000NaNNaN00[]FalseNaN
216267370数据分析专家31544image1/M00/00/48/CgYXBlTUXOaADKooAABjQoD_n1w50...150-500人数据服务不需要融资['专业红娘牵线', '节日礼物', '技能培训', '岗位晋升']开发|测试|运维类数据开发数据分析['数据挖掘', '数据分析']['数据挖掘', '数据分析'][]2020/3/16 11:1611:16发布滨江区NaN200005-10年全职本科五险一金today2020/3/16 11:1646673814号线中医药大学4号线_中医药大学;4号线_联庄30.185480120.139320NaN431701.290228NaNNaNNaN00NaN000NaNNaN00[]False[4号线, 中医药大学;4号线, 联庄]
326804489资深数据分析师34132i/image2/M01/F8/DE/CgoB5lyHTJeAP7v9AAFXUt4zJo4...150-500人数据服务,广告营销A轮['开放式办公', '扁平管理', '带薪假期', '弹性工作时间']开发|测试|运维类数据开发数据分析['数据分析']['电商', '数据分析']['电商', '数据分析']2020/3/16 10:5710:57发布余杭区NaN375003-5年全职本科六险一金 旅游 带薪年假 培训发展 双休today2020/3/16 09:5175425461NaNNaNNaN30.281850120.015690NaN8311601.075712NaNNaNNaN00NaN000NaNNaN00[]FalseNaN
376242470数据分析师31544image1/M00/00/48/CgYXBlTUXOaADKooAABjQoD_n1w50...150-500人数据服务不需要融资['专业红娘牵线', '节日礼物', '技能培训', '岗位晋升']产品|需求|项目类数据分析数据分析['增长黑客', '数据分析', '商业']['增长黑客', '数据分析', '商业'][]2020/3/16 11:1611:16发布滨江区NaN225001-3年全职本科五险一金today2020/3/16 11:1646673814号线中医药大学4号线_中医药大学;4号线_联庄30.185480120.139320NaN431501.060218NaNNaNNaN00NaN000NaNNaN00[]False[4号线, 中医药大学;4号线, 联庄]
506680900数据分析师 (MJ000250)114335i/image2/M00/17/C2/CgoB5ln5lUuAM8oSAADO2Rz54hQ...150-500人数据服务B轮['股票期权', '弹性工作', '领导好', '五险一金']产品|需求|项目类产品经理数据分析师['需求分析', '数据']['企业服务', '大数据', '需求分析', '数据']['企业服务', '大数据', '需求分析', '数据']2020/3/16 10:4910:49发布西湖区NaN275003-5年全职不限阿里系创业、云计算生态、餐补、双休today2020/3/16 10:4938592611NaNNaNNaN30.289482120.067080NaN11500.947202NaNNaNNaN00NaN000NaNNaN00[]FalseNaN
636680900数据分析师 (MJ000250)114335i/image2/M00/17/C2/CgoB5ln5lUuAM8oSAADO2Rz54hQ...150-500人数据服务B轮['股票期权', '弹性工作', '领导好', '五险一金']产品|需求|项目类产品经理数据分析师['需求分析', '数据']['企业服务', '大数据', '需求分析', '数据']['企业服务', '大数据', '需求分析', '数据']2020/3/16 10:4910:49发布西湖区NaN275003-5年全职不限阿里系创业、云计算生态、餐补、双休today2020/3/16 10:4938592611NaNNaNNaN30.289482120.067080NaN11400.856464NaNNaNNaN00NaN000NaNNaN00[]FalseNaN
785683671数据分析实习生 (MJ000087)114335i/image2/M00/17/C2/CgoB5ln5lUuAM8oSAADO2Rz54hQ...150-500人数据服务B轮['股票期权', '弹性工作', '领导好', '五险一金']开发|测试|运维类后端开发数据采集['数据挖掘', '机器学习']['工具软件', '大数据', '数据挖掘', '机器学习']['工具软件', '大数据', '数据挖掘', '机器学习']2020/3/16 10:4910:49发布西湖区NaN26500应届毕业生实习本科阿里系创业、云计算生态、餐补、双休today2020/3/16 10:4938592611NaNNaNNaN30.289482120.067080NaN11300.898513NaNNaNNaN10NaN000NaNNaN00[]FalseNaN
796046866数据分析师543802i/image2/M01/63/3C/CgotOV0ulwOAU8KWAAAsMECc53M...15-50人数据服务不需要融资[]产品|需求|项目类数据分析数据分析['可视化', '数据分析', '数据库']['企业服务', '可视化', '数据分析', '数据库']['企业服务', '可视化', '数据分析', '数据库']2020/3/16 10:1910:19发布西湖区['西溪', '文新']375001-3年全职本科发展潜力,结合业务,项目制overSevenDays2020/3/16 10:191330838512号线文新2号线_文新;2号线_三坝30.289000120.088789NaN00300.902939NaNNaNNaN00NaN000NaNNaN00[]False[2号线, 文新;2号线, 三坝]
926813626资深数据分析专员165939i/image3/M01/65/71/CgpOIF5CFp2ACoo9AAD3IkKwlv8...150-500人数据服务不需要融资['年底双薪', '带薪年假', '午餐补助', '定期体检']开发|测试|运维类数据开发数据分析['数据分析']['数据分析'][]2020/3/15 12:211天前发布余杭区NaN300003-5年全职不限阿里旗下、大数据today2020/3/15 13:1385198051NaNNaNNaN30.281507120.018621NaN11100.440405NaNNaNNaN00NaN000NaNNaN00[]FalseNaN
946818950资深数据分析师165939i/image3/M01/65/71/CgpOIF5CFp2ACoo9AAD3IkKwlv8...150-500人数据服务不需要融资['年底双薪', '带薪年假', '午餐补助', '定期体检']开发|测试|运维类数据开发数据分析['数据分析']['数据分析'][]2020/3/15 12:211天前发布余杭区NaN300005-10年全职不限阿里旗下、大数据today2020/3/15 13:1385198051NaNNaNNaN30.281507120.018621NaN11100.407209NaNNaNNaN00NaN000NaNNaN00[]FalseNaN
976718750旅游大数据分析师(杭州)122019i/image/M00/1A/4A/CgqKkVb583WABT4BAABM5RuPCmk9...50-150人数据服务,企业服务A轮['年底双薪', '股票期权', '午餐补助', '定期体检']开发|测试|运维类数据开发数据治理['数据分析', '数据处理']['旅游', '大数据', '数据分析', '数据处理']['旅游', '大数据', '数据分析', '数据处理']2020/3/12 16:382020/3/12上城区['湖滨', '吴山']300001-3年全职本科管理扁平 潜力项目 五险一金 周末双休sevenDays2020/3/13 08:481134763012号线中河北路1号线_定安路;1号线_龙翔桥;1号线_凤起路;1号线_定安路;1号线_龙翔桥;1号线_凤起...30.254169120.164651NaN30100.826756NaNNaNNaN00NaN000NaNNaN00[]False[1号线, 定安路;1号线, 龙翔桥;1号线, 凤起路;1号线, 定安路;1号线, 龙翔桥;...
986655562数据分析建模工程师117422215i/image2/M01/AF/6D/CgotOV3ki4iAOuo3AABbilI8DfA...50-150人数据服务,信息安全A轮['午餐补助', '带薪年假', '16到18薪', '法定节假日']开发|测试|运维类人工智能机器学习['机器学习', '建模', '数据挖掘', '算法']['机器学习', '建模', '数据挖掘', '算法'][]2020/3/14 19:002天前发布西湖区NaN300001-3年全职本科海量数据 全链路建模实践 16-18薪threeDays2020/3/16 09:30881033612号线丰潭路2号线_古翠路;2号线_丰潭路30.291494120.113955NaN00000.356308NaNNaNNaN00NaN000NaNNaN00[]False[2号线, 古翠路;2号线, 丰潭路]
996677939数据分析建模工程师(校招)117422215i/image2/M01/AF/6D/CgotOV3ki4iAOuo3AABbilI8DfA...50-150人数据服务,信息安全A轮['午餐补助', '带薪年假', '16到18薪', '法定节假日']开发|测试|运维类人工智能算法工程师['机器学习', '建模', '算法', '数据挖掘']['机器学习', '建模', '算法', '数据挖掘'][]2020/3/14 19:002天前发布西湖区NaN36500应届毕业生全职本科海量数据 全链路建模实践 16-18薪threeDays2020/3/16 09:30881033612号线丰潭路2号线_古翠路;2号线_丰潭路30.291494120.113955NaN00000.338603NaNNaNNaN10NaN000NaNNaN00[]False[2号线, 古翠路;2号线, 丰潭路]

117.按列制作数据透视表

pd.pivot_table(df,values=["salary","score"],index="positionId")
salaryscore
positionId
5203054300004.0
520491215000176.0
5269002375001.0
5453691300004.0
55199623750014.0
.........
68829832750015.0
6884346250000.0
6886661375005.0
6888169425001.0
6896403300003.0

95 rows × 2 columns

118.同时对salary、score两列进行计算¶

df[["salary","score"]].agg([np.sum,np.mean,np.min])
salaryscore
sum3.331000e+061335.000000
mean3.172381e+0412.714286
amin3.500000e+030.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)
salary
district
萧山区36250.0
  • 4
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值