目录
一、计算变量
1.基于原变量做简单运算
财产性收入的数值乘10作为名为income的新列。
import pandas as pd
df = pd.read_csv('ex8.6.csv',encoding='utf-8-sig')
df['income'] = df.财产性收入 * 10
原始数据:
地区 工资性收入 经营净收入 财产性收入 转移性收入
0 北京 25161.22 1191.29 696.64 10075.23
1 天津 18794.08 1059.29 462.28 9600.40
2 河北 11686.60 1836.45 318.43 5750.43
3 山西 13146.47 875.24 274.09 5370.29
4 内蒙古 14779.08 2320.36 513.36 4277.38
5 辽宁 13093.86 2285.41 333.55 7166.95
6 吉林 12217.09 1860.32 235.31 4898.99
7 黑龙江 10235.04 1529.14 141.26 5213.05
8 上海 28550.76 1994.12 633.12 9354.29
9 江苏 17761.58 3026.57 667.06 7516.76
10 浙江 20334.25 4383.89 1572.34 7973.91
11 安徽 12915.97 1874.45 569.96 5390.73
12 福建 17438.81 2991.66 1752.82 5194.82
13 江西 11654.36 1721.84 471.73 4808.59
14 山东 17629.40 2294.85 615.69 4349.86
15 河南 12039.24 2264.36 286.02 4937.30
16 湖北 12622.44 1906.73 357.15 5306.95
17 湖南 11550.09 2674.18 770.66 5088.95
18 广东 21092.14 3035.25 1242.95 4848.42
19 广西 13550.16 1699.84 844.91 4751.20
20 海南 12876.92 2158.62 715.40 4343.24
21 重庆 13827.72 1779.43 433.71 5753.42
22 四川 12687.29 1670.51 523.24 4807.05
23 贵州 10754.45 1614.67 356.41 4873.34
24 云南 12416.17 1785.61 1273.99 4779.36
25 西藏 15854.97 486.92 358.07 1415.80
26 陕西 14051.28 771.75 214.18 5032.65
27 甘肃 11195.26 914.30 161.66 3996.15
28 青海 11403.97 1054.60 78.64 5257.77
29 宁夏 12396.71 2367.47 198.48 4691.94
30 新疆 12653.43 1412.32 149.06 3416.35
执行代码后的数据部分截图:
df['income1'] = df.工资性收入 + df.经营净收入
2.使用内部函数计算
经营净收入开方作为income2。
import numpy
df['income2'] = numpy.sqrt(df.经营净收入)
3.1基于一个原变量做函数运算
df['income3'] = df.工资性收入.apply(numpy.sqrt)
3.2使用自定义函数
定义一个函数,将转移性收入的数值乘10作为income4
def get_first(data):
data *= 10
return data
df['income4'] = df.转移性收入.apply(get_first)
4.不修改原df,而是生成新的df
df2 = df.assign(income5 = df.经营净收入.apply(get_first))
此时输出df,df不变。
二、插入变量
1.指定位置增加新列 该方法会直接修改原df
df.insert(6,'income0',100)
在位置6添加名为income0的新列,填充数值100。
2.函数实现
df.insert(7,'income00',df.经营净收入.apply(get_first))
三、修改替换变量值
这个问题本质上是如何直接指定单元格的问题,只要能准确定位单元地址, 就能够做到准确替换。
1.修改
df.地区[0] = '未知' #将地区列的第0个元素修改为未知
df.地区[2] = '未知'
df['工资性收入'][1] = 10000 #将工资性收入列的第1个元素修改为10000
df.loc[1,'经营净收入'] = 2000 #将经营净收入列的第1个元素修改为2000
2.替换
例1
df.地区[df.地区.isin(['未知'])] = '已知'
将地区列所有未知替换为已知。
例2
df.地区.replace('山西','未知',inplace = False)
将山西替换为未知,inplace = False表示不修改原数据。
例3
df.地区.replace(['内蒙古','辽宁'],['nmg','ln'],inplace = False)
将内蒙古,辽宁替换为nmg,ln。
例4
df.地区.replace({'nmg':'内蒙古','ln':'辽宁'},inplace = False)
将nmg,ln替换为内蒙古,辽宁。
四、指定数值范围的替换
1.使用正则匹配数据
df.地区.replace(regex = '已.+',value = 'xxx',inplace = False)
将所有已知替换为xxx。
2.iloc loc
df.income.iloc[0:3] = 20 #将income列0~3行的数据替换为20
df.income1.loc[0:2] =30 #将income1列0~2行的数据替换为30
3.条件筛选替换
df.income2[df.income2>40] = 40
将income列中大于40的替换为40.
4.使用query()
df.loc[df.query('地区 == "已知" and income3 > 130 ').income3.index,'income3'] = 100
将地区为已知且income3的值大于130的替换为100。