增加列
df.insert(loc=2, column='列名', value='值') # 在最后一列后,插入列值全为“值”3的“列名”列
筛选列
将原表中的某列或某几列复制到新表
导入原表: import pandas as pd df = pd.read_csv('match.csv') df 筛选列 df1=df[["Name","Team","Age","Salary"]] df1
筛选某列出现过的值,并展示其余列的数据,注意:无法筛选出这一列的所有空值
import pandas as pd df = pd.read_csv('match.csv') #筛选TEAM是Utah Jazz的信息 df.loc[df['Team']=='Utah Jazz']
删除列
删除Excel列:
df1为删除列后的表,df为原表
# labels=["列A", "列B"] 表示删除那一列或哪几列;axis = 1表示删除列 df1 = df.drop(labels=["College","Salary"],axis = 1)
删除行
- 用索引删除Excel中的行:
df为原表,df1为删除后表
# df.drop()表示删除,df.index()确定索引, 删除某一行 df1 = df.drop(df.index[0],inplace = False) # 删除索引为0的行,inplace=False不改变原表 删除多行(索引连续) df1 = df.drop(df.index[2:4],inplace = False) # 删除索引为2和3的行,inplace=False不改变原表
删除空值行
data.dropna(how = ‘all’) # 传入这个参数后将只丢弃全为缺失值的那些行
data.dropna(axis = 1) # 丢弃有缺失值的列(一般不会这么做,这样会删掉一个特征)
data.dropna(axis=1,how=“all”) # 丢弃全为缺失值的那些列
data.dropna(axis=0,subset = [“Age”, “Sex”]) # 丢弃‘Age’和‘Sex’这两列中有缺失值的行
- 删除值全部为空的每一行
data.dropna(axis=0,how='all')
- 删除表中任何含有空值的行
data.dropna(axis=0,how='any')
- 删除表中全部为NaN的列
data.dropna(axis=1, how='all')
- 删除表中任何含有空值的列
data.dropna(axis=1, how='any')
- 删除表中某列含有空值的行
data.dropna(axis=0,subset = ["a", "b"])
#创建data data = pd.DataFrame({'a': [1, 2, 4, np.nan,7, 9], 'b': ['a', 'b', np.nan, np.nan, 'd', 'e'], 'c': [np.nan, 0, 4, np.nan, np.nan, 5], 'd': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]}) 输出: a b c d 0 1.0 a NaN NaN 1 2.0 b 0.0 NaN 2 4.0 NaN 4.0 NaN 3 NaN NaN NaN NaN 4 7.0 d NaN NaN 5 9.0 e 5.0 NaN 1. 删除值全部为空的每一行 data.dropna(axis=0,how='all') 输出: a b c d 0 1.0 a NaN NaN 1 2.0 b 0.0 NaN 2 4.0 NaN 4.0 NaN 4 7.0 d NaN NaN 5 9.0 e 5.0 NaN 2. 删除表中任何含有空值的行 data.dropna(axis=0,how='any') 输出: a b c d 3. 删除表中全部为NaN的列 data.dropna(axis=1, how='all') 输出: a b c 0 1.0 a NaN 1 2.0 b 0.0 2 4.0 NaN 4.0 3 NaN NaN NaN 4 7.0 d NaN 5 9.0 e 5.0 4. 删除表中任何含有空值的列 data.dropna(axis=1, how='any') 输出: 0 1 2 3 4 5 5. 删除表中某列含有空值的行 data.dropna(axis=0,subset = ["a", "b"]) 输出: a b c d 0 1.0 a NaN NaN 1 2.0 b 0.0 NaN 4 7.0 d NaN NaN 5 9.0 e 5.0 NaN
插入行
df.insert_rows(1) 在第一行前插入一行
修改列名
修改数据中的表头名称
#columns={'A':'A1','B':'B1'}表示修改的列修改为什么;rename()表示重命名 df.rename(columns={'Name':'姓名','Age':'年龄'}, inplace = True) #inplace表示修改原表 #输出结果如下:
隐藏列
df.style.hide_index().hide_columns(['XX','XX','XX'])
替换列值
df.loc[df['列名']=='原值'] = '替换值'
#替换整行
2、df.replace({'列名':{'值1':'替换值1','值2':'替换值2'}},inplace=True)
把一列中某个值替换为另一个值
3、单个元素替换
将某列为空值,对应另一列的值改为指定值
import pandas as pd import numpy as np df = pd.read_csv('match.csv',nrows=10) df.loc[df['College'].isnull(), 'Salary'] = 'qita' df
4. 替换某列空值为指定值
import pandas as pd import numpy as np df = pd.read_csv('match.csv',nrows=10) df.loc[df['College'].isnull(), 'College'] = '其他' df
- 一次性替换空值和非空值
import pandas as pd import numpy as np df = pd.read_csv('match.csv',nrows=10) df['College'] = df['Salary'].isna().map({True:0, False:1}) df
单元格赋值
df[‘A1’]=‘赋值’
一列去除重复值
data=df.drop_duplicates(subset=['去重列'],keep='first',inplace=False) #subset需要去除重复的列,first保留去重的方式,inplace为False不修改df
隐藏索引
只是隐藏索引,导出文件,仍会导出索引
df.style.hide_index()
设置索引列
将某一列作为索引列:
import pandas as pd df = pd.read_csv('match.csv') df.set_index('Name', inplace=True) df # 输出结果:
取消索引列,恢复默认索引:
#使用reset_index()取消索引 df.reset_index() #输出结果:
reset_index()
方法将 DataFrame 索引重置为默认数字索引,在以下情况下特别有用:
- 执行数据整理时——尤其是过滤数据或删除缺失值等预处理操作,会导致较小的 DataFrame 具有不再连续的数字索引
- 当索引应该被视为一个常见的 DataFrame 列时
- 当索引标签没有提供有关数据的任何有价值的信息时
求交集(A∩B)
# 使用 ndarrays 创建2张表,都又共同字段“学号” # 使用 ndarrays 创建表 dataA = {'学号':['1', '2', '3','4','5'],'姓名':['张三','里斯','王五','查理','roise']} A = pd.DataFrame(dataA) dataB = {'学号':['0','1', '2', '3','4','5','7'],'年龄':['20','23','22','34','33','12','28'],'成绩':['无','89','90','67','88','78','90']} B = pd.DataFrame(dataB) print(A) print(B) 输出: A 学号 姓名 0 1 张三 1 2 里斯 2 3 王五 3 4 查理 4 5 roise B 学号 年龄 成绩 0 0 20 无 1 1 23 89 2 2 22 90 3 3 34 67 4 4 33 88 5 5 12 78 6 7 28 90 #求交集 A.merge(B) #第一种写法 pd.merge(A, B, on=['学号']) #第二种写法, on表示用哪个字段合并,可以多个 均输出: 学号 姓名 年龄 成绩 0 1 张三 23 89 1 2 里斯 22 90 2 3 王五 34 67 3 4 查理 33 88 4 5 roise 12 78
求A与B不共有的部分((A+B)-(A∩B))
求A表与B表的不重复的部分,即(A+B)-(A∩B)
注意:求差集时,若A表与B表的表头一致,则直接返回对应差集,若表头不一致,填充NA
#test dataA = {'学号':['1', '2', '3','4','5','6'],'年龄':['23','22','34','33','12','27'],'成绩':['89','90','67','88','78','98']} A = pd.DataFrame(dataA) dataB = {'学号':['0','1', '2', '3','4','5','7'],'年龄':['20','23','22','34','33','12','28'],'成绩':['无','89','90','67','88','78','90']} B = pd.DataFrame(dataB) print(A) print(B) 输出: 学号 年龄 成绩 0 1 23 89 1 2 22 90 2 3 34 67 3 4 33 88 4 5 12 78 5 6 27 98 学号 年龄 成绩 0 0 20 无 1 1 23 89 2 2 22 90 3 3 34 67 4 4 33 88 5 5 12 78 6 7 28 90 #### res = pd.concat([A,B]).drop_duplicates(subset=['学号'],keep=False) res 输出: res 学号 年龄 成绩 5 6 27 98 0 0 20 无 6 7 28 90
求差集(A-B)
现有表A,B,A与B中有重复数据C,要找出A表中有B表中没有的数据,即A与B 的差集(A-B),也即(A-C)
首先用交集求出C:df_a.merge(df_b)
或者 pd.merge(df_a,df_b,on = ['共有字段'])
再用A减去A与B的交集C :pd.concat([df_a,df_b]).drop_duplicates(subset=['XXX'],keep=False)
注意:A与C最好表头一致,如果不一致,会多出很多列,也可以后面删除
#实例 dataA = {'学号':['1', '2', '3','4','5','6'],'年龄':['23','22','34','33','12','27'],'成绩':['89','90','67','88','78','98']} B = pd.DataFrame(dataA) dataB = {'学号':['0','1', '2', '3','4','5','7'],'年龄':['20','23','22','34','33','12','28'],'成绩':['无','89','90','67','88','78','90']} A = pd.DataFrame(dataB) print(A) print(B) 输出: A 学号 年龄 成绩 0 0 20 无 1 1 23 89 2 2 22 90 3 3 34 67 4 4 33 88 5 5 12 78 6 7 28 90 B 学号 年龄 成绩 0 1 23 89 1 2 22 90 2 3 34 67 3 4 33 88 4 5 12 78 5 6 27 98 #求交集A∩B C = A.merge(B) C 输出: C 学号 年龄 成绩 0 1 23 89 1 2 22 90 2 3 34 67 3 4 33 88 4 5 12 78 chaji = pd.concat([A,C]).drop_duplicates(subset=['学号'],keep=False) chaji 输出: A-C 学号 年龄 成绩 0 0 20 无 6 7 28 90
@
@
@