import pandas as pd import numpy as np import math pd.options.display.max_rows = 10 # 设置显示行数 df1 = pd.read_csv(r‘E:\anacondatest\PythonData\高校信息.csv‘, encoding=‘gbk‘, index_col=‘学校名称‘) # 添加一列值为1的列 df1[‘cons‘] = 1 # 通过原变量列经过四则运算生成新列 df1[‘new‘] = df1.总分 + df1.名次 + 1 df1[‘new1‘] = np.sqrt(df1.总分) # numpy支持serial数据格式运算,math库中的sqrt方法就不行,如果使用math库,要和apply连用才可以 # 基于一个原变量做函数运算 df1[‘new3‘] = df1.总分.apply(math.sqrt) df1[‘new3‘] = df1.总分.apply(np.sqrt) # 对所有单元格进行相同的函数运算 df2 = df1[[‘名次‘, ‘总分‘]].applymap(math.sqrt) # 返回 ‘‘‘ 名次 总分 学校名称 北京大学 1.000000 10.000000 清华大学 1.414214 9.924717 ‘‘‘ # 不改变原来的数据框,生成新的数据框 df3 = df1.assign(new4 = df1.总分.apply(math.sqrt)) # 在指定位置插入变量列,该方法直接改变原来的数据框 df1.insert(1, ‘new5‘, ‘cons‘) # 1表示列索引,new5变量列名字,cons新列的值 # 修改/替换变量值,本质是如何指定到单元格的问题,只要能准确找到单元格地址,就能准确替换 # print(df1.所在城市.isin([‘上海‘])) ‘‘‘ 学校名称 北京大学 False 清华大学 False ‘‘‘ # print(df1.head()) df1.所在城市[70] = ‘上海‘ df1[‘所在城市‘][70] = ‘上海‘ df1.loc[70, ‘所在城市‘] = ‘上海‘ # 对应数值的替换 df1.所在城市.replace(‘上海‘, ‘魔都‘, inplace=False) # 将所在城市的上海全部替换成魔都 df1.所在城市.replace([‘北京‘, ‘魔都‘], [‘帝都‘, ‘上海‘], inplace=False) df1.所在城市.replace({‘帝都‘:‘北京‘, ‘上海‘:‘魔都‘}, inplace=False) # 指定数值替换 df1.总分.iloc[0:3] = 10 # 总分列1-3行全部数据替换成10 df1.iloc[0:3, ‘总分‘] = 10 # 总分列1-3行全部数据替换成10 df1.loc[df1.名次<10, ‘总分‘] =20 # 用index引出相应的索引 df1.总分[df1.名次<10] = 25 df1.loc[df1.query("名次<10 and 类型==‘综合‘").index, ‘总分‘] = 10 # query语句可以用于index定位,然后实现数值替换,但是无法直接实现数值替换,因为query生成的是数据的copy而不是数据地址的引用 # 哑变量变换 print(df1.head()) pd.get_dummies(df2.类型, prefix=‘pre‘, prefix_sep=‘-‘) # prefix哑变量列名称前缀,prefix_sep前缀和序号直接的连接字符 pd.get_dummies(df1, columns=[‘类型‘]) # columns希望转换的原始列名,不指定转换所有符合条件的 # 数值变量分段,bins具体分段设定,right每段是否包括右侧边界,include_lowest第一段是否包括最左侧的值,需要和right参数配合使用 df1[‘new6‘] = pd.cut(df1.名次, bins=[1, 3, 7], right=True, include_lowest=True)
原文:https://www.cnblogs.com/kogmaw/p/12563074.html