Pandas 入门

x33g5p2x  于2021-09-19 转载在 其他  
字(15.1k)|赞(0)|评价(0)|浏览(253)

Pandas 入门

  1. ‘Series’:数据系列,代表一维数据,较numpy中的一维数组更强大;
  2. ‘DataFrame’:数据窗/数据框/数据表,代表二维数据,封装了数据分析常用的各种方法;
  3. ‘Index’:索引,为Series和DataFrame提供数据索引服务。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['STFangsong']
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format = 'svg'

1.1 Series

可自定义索引,默认为0,1,2,3…

自定义索引后仍可使用默认索引,也可使用逆向索引

未自定义默认索引不允许使用逆向索引

# 创建Series对象
# 方式一
ser1 = pd.Series(data = [12,54,78,95],index = [f'{x}季度' for x in '一二三四'])
ser1
一季度    12
二季度    54
三季度    78
四季度    95
dtype: int64
ser1['一季度']
12

多条数据取出来仍为一个系列

ser1[ser1 >= 60]
三季度    78
四季度    95
dtype: int64
# 花式索引
ser1[['一季度','三季度']]
一季度    12
三季度    78
dtype: int64
# 方式二
ser2 = pd.Series(data={'一季度':253,'二季度':563,'三季度':193,'四季度':245})
ser2
一季度    253
二季度    563
三季度    193
四季度    245
dtype: int64
Series 属性
ser2.二季度
563
# ser2数据类型
ser2.dtype
dtype('int64')
# ser2类型
type(ser2)
pandas.core.series.Series
# ser2索引
ser2.index
Index(['一季度', '二季度', '三季度', '四季度'], dtype='object')
# ser2值
ser2.values
array([253, 563, 193, 245], dtype=int64)
# ser2元素个数
ser2.size
4
# ser2元素是否唯一,True:唯一
ser2.is_unique
True
# ser2是否含有空值,False:不含有
ser2.hasnans
False
ser2.loc['二季度':'四季度']
二季度    563
三季度    193
四季度    245
dtype: int64
# ser2是否单调
ser2.is_monotonic
False
Series 方法
# 获取描述性统计信息 ---> 集中趋势
print(ser2.sum())  #求和
print(ser2.mean())  #平均值
print(ser2.median())   #中位数
print(ser2.quantile())   # 中位数
print(ser2.mode())   #众数 - 出现频次相同全都打印
1254
313.5
249.0
249.0
0    193
1    245
2    253
3    563
dtype: int64
# 获取描述性统计信息 ---> 离散趋势
print(ser2.max())  #最大值
print(ser2.min())  #最小值
print(ser2.var())  #方差
print(ser2.std())  #标准差
print(ser2.quantile(0.25))  #下四分位数(0.25,0.5,0.75)默认为0.5(中位数)
563
193
28374.333333333332
168.44682642701622
232.0
# 数据系列描述
ser2.describe()
count      4.000000
mean     313.500000
std      168.446826
min      193.000000
25%      232.000000
50%      249.000000
75%      330.500000
max      563.000000
dtype: float64
ser3 = pd.Series(data=[1,2,5,9,5,9,1,6,4,1,9])
ser3
0     1
1     2
2     5
3     9
4     5
5     9
6     1
7     6
8     4
9     1
10    9
dtype: int64
# 去重 ---> ndarray(返回数组)
ser3.unique()
array([1, 2, 5, 9, 6, 4], dtype=int64)
# 去重后元素个数
ser3.nunique()
6
# 元素重复频次(按频次降序排列)
ser3.value_counts()
# 删除重复元素 --->series(去重)
# 保留相同元素的第一个(默认)
ser3.drop_duplicates()
0    1
1    2
2    5
3    9
7    6
8    4
dtype: int64
# 去重 保留相同元素的最后一个
ser3.drop_duplicates(keep = 'last')
# 去重 相同元素一个不留,只保留不同元素
ser3.drop_duplicates(keep = False)

上面去重方法均未改变原数据系列(ser3)
想要在原数据系列做修改设置inplace = True

# inplace - 是否就地删除(改变ser3)
# True - 就地操作,不返回新对象 ---> None
# False(默认值) - 返回操作后的新对象 ---> Series
ser3.drop_duplicates(keep=False,inplace=True)
ser3
ser4 = pd.Series(data=[10, 20, np.NaN, 30, np.NaN])
ser4
0    10.0
1    20.0
2     NaN
3    30.0
4     NaN
dtype: float64
# 删除指定索引数据,原数据系列不变
ser4.drop(index = [2,4])
# ser4.drop(index = 2)
0    10.0
1    20.0
3    30.0
dtype: float64
# 判断是否为空
ser4.isnull()
0    False
1    False
2     True
3    False
4     True
dtype: bool
# 删除空值
ser4.dropna()
0    10.0
1    20.0
3    30.0
dtype: float64
# 填充空值 指定值
ser4.fillna(50)
0    10.0
1    20.0
2    50.0
3    30.0
4    50.0
dtype: float64
# 填充空值 邻近的前面的值
ser4.fillna(method='ffill')
0    10.0
1    20.0
2    20.0
3    30.0
4    30.0
dtype: float64
# 填充空值 邻近的后面的值
ser4.fillna(method='bfill')
0    10.0
1    20.0
2    30.0
3    30.0
4     NaN
dtype: float64
# 填充空值 可使用级联操作
ser4.fillna(method='bfill').fillna(method='ffill')
0    10.0
1    20.0
2    30.0
3    30.0
4    30.0
dtype: float64
# 给索引(Unicode编码)排序
# ord('三') = 19977,ord('二') = 20108(这就是为什么打印结果三季度在二季度前面的原因)
# ascending - 升序/降序 默认为True(升序)
ser1.sort_index()
一季度    12
三季度    78
二季度    54
四季度    95
dtype: int64
# 值排序
ser1.sort_values(ascending=False)
四季度    95
三季度    78
二季度    54
一季度    12
dtype: int64
# Top - N 
ser1.nlargest(2)
四季度    95
三季度    78
dtype: int64
# Min - N 
ser1.nsmallest(2)
一季度    12
二季度    54
dtype: int64
ser5 = pd.Series(['cat', 'dog', np.nan, 'rabbit'])
ser5
0       cat
1       dog
2       NaN
3    rabbit
dtype: object
# 格式化 na_action='ignore'忽略空值
ser5.map('I am a {}'.format,na_action='ignore')
0       I am a cat
1       I am a dog
2              NaN
3    I am a rabbit
dtype: object
ser6 = pd.Series(np.random.randint(30,80,10))
ser6
0    77
1    67
2    49
3    41
4    62
5    41
6    57
7    64
8    39
9    56
dtype: int32
def handle(score):
    return score ** 0.5 * 10

# map
np.round(ser6.map(handle),0)
0    88.0
1    82.0
2    70.0
3    64.0
4    79.0
5    64.0
6    75.0
7    80.0
8    62.0
9    75.0
dtype: float64
# 应用
np.round(ser6.apply(handle),0)
0    88.0
1    82.0
2    70.0
3    64.0
4    79.0
5    64.0
6    75.0
7    80.0
8    62.0
9    75.0
dtype: float64
ser1
一季度    12
二季度    54
三季度    78
四季度    95
dtype: int64

线性归一化:
X ′ = X i − X m i n X m a x − X m i n X' = \frac{X_{i} - X_{min}}{X_{max} - X_{min}}X′=Xmax​−Xmin​Xi​−Xmin​​

零均值归一化(标准化):
X ′ = X i − μ σ X' = \frac{X_{i} - μ}{σ}X′=σXi​−μ​
其中 x 为某个特征的原始值, μ为该特征在所有样本中的平均值,σ 为该特征在所有样本中的标准差, X’ 为经过标准化处理后的特征值 ~ N(0, 1)

# 线性归一化
ser1.map(lambda x: (x - ser1.min()) / (ser1.max() - ser1.min()))
一季度    0.000000
二季度    0.506024
三季度    0.795181
四季度    1.000000
dtype: float64
ser1.plot(kind = 'bar')
plt.xticks(rotation = 0)   # x坐标描述旋转0度
# 添加网格线
plt.grid(True,alpha = 0.5,axis = 'y',linestyle = ':')
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>

# 饼图
ser1.plot(kind = 'pie',autopct = '%.2f%%')  # 自动显示百分比。要显示百分号要写两个%%,第一个表示转义字符
plt.ylabel('')
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>

# 零均值归一化
temp_ser = ser1.map(lambda x: (x - ser1.mean()) / ser1.std())
# print(np.std(ser1)) # 总体标准偏差(计算结果/N)
# print(ser1.std()) # 样本标准偏差(计算结果/(N-1))
temp_ser
一季度   -1.326261
二季度   -0.159707
三季度    0.506896
四季度    0.979072
dtype: float64
print('均值:',temp_ser.mean())
print('标准差',temp_ser.std())
均值: 0.0
标准差 1.0

1.2 DataFrame

1.2.1 创建DataFrame对象
# 第一种:通过二维数组创建DataFrame(参考基本使用文章分数例子)
# 第二种:通过字典创建DataFrame(参考Numpy高级使用波士顿房价)
# 第三种:读取CSV文件创建DataFrame
df = pd.read_csv('../files/data/订单.csv',encoding = 'utf-8')
df
# 参数设置
# sep = ''指定分隔符,默认为逗号;nrows = 20:控制读取行数
# skiprows = [5,6] - 跳过指定行 skiprows = range(1,11) - 跳过1-10行(0行是表头)
订单编号标题价格购买数量外部系统编号商品属性套餐信息备注订单状态商家编码
0266170127728日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
1254450690237日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
2254450690237swisse护肝片 澳洲1701931177058999NaNNaNNaN卖家已发货,等待买家确认931177058999
3254406313174日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
4254407814052日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
.................................
1827235295148424日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN交易关闭456026429338
1828244853521870日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN交易成功456026429338
1829222644397061澳洲swisse蔓越莓胶1751931177059169NaNNaNNaN交易成功931177059169
1830235247255688日本代购新谷酵素夜迟减肥3992456026429338NaNNaNNaN交易成功456026429338
1831244824365989KAWAI鱼肝油丸(蓝罐2381498704931842NaNNaNNaN交易成功498704931842

1832 rows × 10 columns

# 取指定位置的指定行
temp_df = pd.read_csv('../files/data/订单.csv',encoding = 'utf-8',
                     nrows = 20, skiprows = range(50,70))
temp_df
订单编号标题价格购买数量外部系统编号商品属性套餐信息备注订单状态商家编码
0266170127728日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
1254450690237日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
2254450690237swisse护肝片 澳洲1701931177058999NaNNaNNaN卖家已发货,等待买家确认931177058999
3254406313174日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
4254407814052日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
5254219808661日本代购新谷酵素夜迟减肥3992456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
6266114204270日本代购新谷酵素夜迟减肥3992456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
7228811777226日本代购新谷酵素夜迟减肥3992456026429033NaNNaNNaN卖家已发货,等待买家确认456026429033
8266100464345澳洲蔓越莓胶囊30粒sw1751931177059169NaNNaNNaN等待买家付款931177059169
9266081487348澳洲蔓越莓胶囊30粒sw1751931177059169NaNNaNNaN等待买家付款931177059169
10266048403449日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
11254145112402KAWAI 鱼肝油钙丸2381498704921261NaNNaNNaN卖家已发货,等待买家确认498704921261
12228793438409美国进口普利普莱叶黄素软3291ecms-tz-0010NaNNaNNaN卖家已发货,等待买家确认ecms-tz-0010
13228791918374美国进口普利普莱叶黄素软3291ecms-tz-0010NaNNaNNaN买家已付款,等待卖家发货ecms-tz-0010
14254100912323日本kawai卡哇伊肝油2591498704921251NaNNaNNaN交易关闭498704921251
15266137702384日本fancl美白丸全身2041490804934732NaNNaNNaN卖家已发货,等待买家确认490804934732
16266045321080日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
17265915323005日本代购新谷酵素夜迟减肥3991456026429338NaNNaN尽快发货,谢谢!卖家已发货,等待买家确认456026429338
18266003725097日本代购新谷酵素夜迟减肥3991456026429033NaNNaNNaN卖家已发货,等待买家确认456026429033
19266003205038日本代购新谷酵素夜迟减肥3991456026429338NaNNaNNaN卖家已发货,等待买家确认456026429338
# 第四种:读取Excel文件创建DataFrame
df1 = pd.read_excel('../files/data/2020年销售数据.xlsx',sheet_name = 'Sheet1')
df1
# 参数设置
# sheet_name = 'SheetName'指定读取的工作表,默认为活跃表
# header = RowNumber 指定表头行;默认为0
# use_cols = (ColName1,ColName2...) 指定只读列
销售日期销售信息销售区域销售渠道销售订单品牌售价销售数量销售额
02020-01-01上海拼多多订单182894-455上海拼多多182894-455八匹马99838217
12020-01-01上海抖音订单205635-402上海抖音205635-402八匹马219296351
22020-01-01上海天猫订单205654-021上海天猫205654-021八匹马1698514365
32020-01-01上海天猫订单205654-519上海天猫205654-519八匹马169142366
42020-01-01上海天猫订单377781-010上海天猫377781-010皮皮虾2496115189
..............................
19402020-12-30北京京东订单D89677北京京东D89677花花姑娘269266994
19412020-12-30福建实体订单182719-050福建实体182719-050八匹马79977663
19422020-12-31福建实体订单G70083福建实体G70083花花姑娘2695514795
19432020-12-31福建抖音订单211471-902/704福建抖音211471-902/704八匹马59593481
19442020-12-31福建天猫订单211807-050福建天猫211807-050八匹马99272673

1945 rows × 9 columns

df2 = pd.read_csv('../files/data/2018年北京积分落户数据.csv',encoding = 'utf-8')
df2
idnamebirthdaycompanyscore
01杨效丰1972-12北京利德华福电气技术有限公司122.59
12纪丰伟1974-12北京航天数据股份有限公司121.25
23王永1974-05品牌联盟(北京)咨询股份公司118.96
34杨静1975-07中科专利商标代理有限责任公司118.21
45张凯江1974-11北京阿里巴巴云计算技术有限公司117.79
..................
60146015孙宏波1978-08华为海洋网络有限公司北京科技分公司90.75
60156016刘丽香1976-11福斯(上海)流体设备有限公司北京分公司90.75
60166017周崧1977-10赢创德固赛(中国)投资有限公司90.75
60176018赵妍1979-07澳科利耳医疗器械(北京)有限公司90.75
60186019贺锐1981-06北京宝洁技术有限公司90.75

6019 rows × 5 columns

df3 = pd.read_excel('../files/data/口罩销售数据.xlsx')
df3
日期销售城市产品类别销售员数量单价金额
02020-01-01广州纯棉口罩王大锤616
12020-01-01武汉明星口罩秦红棉3030900
22020-01-01深圳明星口罩秦红棉23060
32020-01-03上海防雾霾口罩白元芳63281764
42020-01-04武汉明星口罩白元芳2530750
........................
9942020-12-30南昌医用口罩陆小凤1633489
9952020-12-31武汉纯棉口罩王大锤23123
9962020-12-31上海医用口罩王大锤2593777
9972020-12-31上海N95口罩白元芳2525625
9982020-12-31武汉防雾霾口罩陆小凤50281400

999 rows × 7 columns

安装pymysql

!pip install pymysql
Looking in indexes: https://pypi.doubanio.com/simple
Requirement already satisfied: pymysql in d:\programs\python\python38\lib\site-packages (1.0.2)
import pymysql

conn = pymysql.connect(host = 'localhost',port = 3306,user = 'root',
                      password = 'YourPassword',database = 'DatabaseName',charset = 'utf8mb4')
conn  # 检查连接结果
<pymysql.connections.Connection at 0x22232ea2b50>
# 第五种:通过SQL数据库读取创建DataFrame
dept_df = pd.read_sql('select dno ,dname,dloc from tb_dept',conn,
                     index_col = 'dno')# 设置索引为dno列
dept_df
dnamedloc
dno
10会计部北京
20研发部成都
30销售部重庆
40运维部深圳
emp_df = pd.read_sql('select eno ,ename,job,mgr,sal from tb_emp',conn,
                     index_col = 'eno')   # 索引列(将指定的列作为索引列)
emp_df
enamejobmgrsal
eno
1359胡一刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
3244欧阳锋程序员3088.03200
3251张翠山程序员2056.04000
3344黄蓉销售主管7800.03000
3577杨过会计5566.02200
3588朱九真会计5566.02500
4466苗人凤销售员3344.02500
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000
# 查看表信息
emp_df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 14 entries, 1359 to 7800
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   ename   14 non-null     object 
 1   job     14 non-null     object 
 2   mgr     13 non-null     float64
 3   sal     14 non-null     int64  
dtypes: float64(1), int64(1), object(2)
memory usage: 560.0+ bytes
# 取到的每一列都是数据系列
emp_df['ename']
eno
1359    胡一刀
2056     乔峰
3088    李莫愁
3211    张无忌
3233    丘处机
3244    欧阳锋
3251    张翠山
3344     黄蓉
3577     杨过
3588    朱九真
4466    苗人凤
5234     郭靖
5566    宋远桥
7800    张三丰
Name: ename, dtype: object
# 单取某一行也是数据系列
# obj.loc[index]
emp_df.loc[1359]
emp_df.loc[[1359,5566]]   #花式索引
enamejobmgrsal
eno
1359胡一刀销售员3344.01800
5566宋远桥会计师7800.04000
# 切片&整数(默认)索引
emp_df.iloc[0:3]
enamejobmgrsal
eno
1359胡一刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
# 修改某单元跟值
emp_df.loc[1359,'ename'] = '胡二刀'
emp_df
enamejobmgrsal
eno
1359胡二刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
3244欧阳锋程序员3088.03200
3251张翠山程序员2056.04000
3344黄蓉销售主管7800.03000
3577杨过会计5566.02200
3588朱九真会计5566.02500
4466苗人凤销售员3344.02500
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000
索引行时必须使用索引器 obj.loc [ RowIndex]
# 查看前某行,默认为5
emp_df.head()
enamejobmgrsal
eno
1359胡二刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
# 查看后三行,默认为5
emp_df.tail(3)
enamejobmgrsal
eno
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000
# 添加列
emp_df['婚姻状态'] = '未婚'
emp_df
enamejobmgrsal婚姻状态
eno
1359胡二刀销售员3344.01800未婚
2056乔峰分析师7800.05000未婚
3088李莫愁设计师2056.03500未婚
3211张无忌程序员2056.03200未婚
3233丘处机程序员2056.03400未婚
3244欧阳锋程序员3088.03200未婚
3251张翠山程序员2056.04000未婚
3344黄蓉销售主管7800.03000未婚
3577杨过会计5566.02200未婚
3588朱九真会计5566.02500未婚
4466苗人凤销售员3344.02500未婚
5234郭靖出纳5566.02000未婚
5566宋远桥会计师7800.04000未婚
7800张三丰总裁NaN9000未婚
emp_df.loc[3088,'婚姻状态'] = '已婚'
emp_df
enamejobmgrsal婚姻状态
eno
1359胡二刀销售员3344.01800未婚
2056乔峰分析师7800.05000未婚
3088李莫愁设计师2056.03500已婚
3211张无忌程序员2056.03200未婚
3233丘处机程序员2056.03400未婚
3244欧阳锋程序员3088.03200未婚
3251张翠山程序员2056.04000未婚
3344黄蓉销售主管7800.03000未婚
3577杨过会计5566.02200未婚
3588朱九真会计5566.02500未婚
4466苗人凤销售员3344.02500未婚
5234郭靖出纳5566.02000未婚
5566宋远桥会计师7800.04000未婚
7800张三丰总裁NaN9000未婚
# 添加行
emp_df.loc[9999]={'ename':'蜘蛛侠','job':'架构师','mgr':np.nan,'sal':9000,'婚姻状态':'未婚'}
emp_df
enamejobmgrsal婚姻状态
eno
1359胡二刀销售员3344.01800未婚
2056乔峰分析师7800.05000未婚
3088李莫愁设计师2056.03500已婚
3211张无忌程序员2056.03200未婚
3233丘处机程序员2056.03400未婚
3244欧阳锋程序员3088.03200未婚
3251张翠山程序员2056.04000未婚
3344黄蓉销售主管7800.03000未婚
3577杨过会计5566.02200未婚
3588朱九真会计5566.02500未婚
4466苗人凤销售员3344.02500未婚
5234郭靖出纳5566.02000未婚
5566宋远桥会计师7800.04000未婚
7800张三丰总裁NaN9000未婚
9999蜘蛛侠架构师NaN9000未婚
# 删除指定列 inplace = True - 在原表上做修改
# emp_df.drop(columns = ['婚姻状态'],inplace=True)
emp_df
enamejobmgrsal
eno
1359胡二刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
3244欧阳锋程序员3088.03200
3251张翠山程序员2056.04000
3344黄蓉销售主管7800.03000
3577杨过会计5566.02200
3588朱九真会计5566.02500
4466苗人凤销售员3344.02500
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000
9999蜘蛛侠架构师NaN9000
# 删除指定行
emp_df.drop(index = 9999,inplace=True)
emp_df
enamejobmgrsal
eno
1359胡二刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
3244欧阳锋程序员3088.03200
3251张翠山程序员2056.04000
3344黄蓉销售主管7800.03000
3577杨过会计5566.02200
3588朱九真会计5566.02500
4466苗人凤销售员3344.02500
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000
# 修改列名
emp_df.rename(columns={'ename':'姓名','job':'职位','mgr':'主管','sal':'薪水'},inplace=True)
emp_df
姓名职位主管薪水
eno
1359胡二刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
3244欧阳锋程序员3088.03200
3251张翠山程序员2056.04000
3344黄蓉销售主管7800.03000
3577杨过会计5566.02200
3588朱九真会计5566.02500
4466苗人凤销售员3344.02500
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000
# 调整列顺序(重新调整)
emp_df1 = emp_df.reindex(columns=['姓名','职位','薪水','主管'])
emp_df1
姓名职位薪水主管
eno
1359胡二刀销售员18003344.0
2056乔峰分析师50007800.0
3088李莫愁设计师35002056.0
3211张无忌程序员32002056.0
3233丘处机程序员34002056.0
3244欧阳锋程序员32003088.0
3251张翠山程序员40002056.0
3344黄蓉销售主管30007800.0
3577杨过会计22005566.0
3588朱九真会计25005566.0
4466苗人凤销售员25003344.0
5234郭靖出纳20005566.0
5566宋远桥会计师40007800.0
7800张三丰总裁9000NaN
# 重新设置索引,将eno重置为正常列(去掉之前设置的索引列)
emp_df.reset_index(inplace=True)
emp_df
eno姓名职位主管薪水
01359胡二刀销售员3344.01800
12056乔峰分析师7800.05000
23088李莫愁设计师2056.03500
33211张无忌程序员2056.03200
43233丘处机程序员2056.03400
53244欧阳锋程序员3088.03200
63251张翠山程序员2056.04000
73344黄蓉销售主管7800.03000
83577杨过会计5566.02200
93588朱九真会计5566.02500
104466苗人凤销售员3344.02500
115234郭靖出纳5566.02000
125566宋远桥会计师7800.04000
137800张三丰总裁NaN9000
# 设置索引,将某列设置为索引
emp_df2 = emp_df.set_index('eno')
emp_df2
姓名职位主管薪水
eno
1359胡二刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
3244欧阳锋程序员3088.03200
3251张翠山程序员2056.04000
3344黄蓉销售主管7800.03000
3577杨过会计5566.02200
3588朱九真会计5566.02500
4466苗人凤销售员3344.02500
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000
# 设置多个索引
emp_df3 = emp_df.set_index(['eno','姓名'])
emp_df3
职位主管薪水
eno姓名
1359胡二刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
3244欧阳锋程序员3088.03200
3251张翠山程序员2056.04000
3344黄蓉销售主管7800.03000
3577杨过会计5566.02200
3588朱九真会计5566.02500
4466苗人凤销售员3344.02500
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000
emp_df3.reset_index(level = 1)
姓名职位主管薪水
eno
1359胡二刀销售员3344.01800
2056乔峰分析师7800.05000
3088李莫愁设计师2056.03500
3211张无忌程序员2056.03200
3233丘处机程序员2056.03400
3244欧阳锋程序员3088.03200
3251张翠山程序员2056.04000
3344黄蓉销售主管7800.03000
3577杨过会计5566.02200
3588朱九真会计5566.02500
4466苗人凤销售员3344.02500
5234郭靖出纳5566.02000
5566宋远桥会计师7800.04000
7800张三丰总裁NaN9000

相关文章