pandas 数据处理汇总(中)

简介: pandas 数据处理汇总(中)

增加列

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


3eb76900cb2d4aa2b3bc24ef412d11eb.png

0d4e70ee11af4016a0c658d60240d4c8.png

筛选某列出现过的值,并展示其余列的数据,注意:无法筛选出这一列的所有空值

import pandas as pd 
df = pd.read_csv('match.csv')
#筛选TEAM是Utah Jazz的信息
df.loc[df['Team']=='Utah Jazz']

b407c439450448d6954c170f2419262a.png

f8e0bd42550449ca9b5b08e226ef265d.png

删除列

删除Excel列:

df1为删除列后的表,df为原表

# labels=["列A", "列B"]  表示删除那一列或哪几列;axis = 1表示删除列
df1 = df.drop(labels=["College","Salary"],axis = 1)


b40f99c1f614463aa026e1022b00ab5b.png

fec105c7905d439195f25ec902252782.png

删除行

  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不改变原表


fcf3591f7342413bb381419936253fc1.png

81ff53e72f0548f3b72042594b0231ff.png

10add74d9dd94489be01787734ddeded.png


删除空值行

data.dropna(how = ‘all’) # 传入这个参数后将只丢弃全为缺失值的那些行

data.dropna(axis = 1) # 丢弃有缺失值的列(一般不会这么做,这样会删掉一个特征)

data.dropna(axis=1,how=“all”) # 丢弃全为缺失值的那些列

data.dropna(axis=0,subset = [“Age”, “Sex”]) # 丢弃‘Age’和‘Sex’这两列中有缺失值的行


  1. 删除值全部为空的每一行
    data.dropna(axis=0,how='all')
  2. 删除表中任何含有空值的行
    data.dropna(axis=0,how='any')
  3. 删除表中全部为NaN的列
    data.dropna(axis=1, how='all')
  4. 删除表中任何含有空值的列
    data.dropna(axis=1, how='any')
  5. 删除表中某列含有空值的行
    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表示修改原表
#输出结果如下:

bb01291db9914663a58fb9d06a78bf1f.png

隐藏列

df.style.hide_index().hide_columns(['XX','XX','XX'])


替换列值

  1. df.loc[df['列名']=='原值'] = '替换值' #替换整行

2cde120a74794a2082013d96270c74ed.png

2、df.replace({'列名':{'值1':'替换值1','值2':'替换值2'}},inplace=True)

把一列中某个值替换为另一个值

9516c6b35037444485ae5983b2ef96a0.png

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

1b51a09837eb42dcad8732e640071321.png

adde932a07c44685a8da2178389bdb23.png

4. 替换某列空值为指定值

import pandas as pd 
import numpy as np
df = pd.read_csv('match.csv',nrows=10)
df.loc[df['College'].isnull(), 'College'] = '其他'
df

12763257a5a94726a93bc88b4d5a93e2.png

  1. 一次性替换空值和非空值
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


6a7ac97995a5472a88c4f499d34551c5.png

单元格赋值

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
# 输出结果:


8269306e3cd2459bb1f2525e78fabb2d.png

取消索引列,恢复默认索引:

#使用reset_index()取消索引
df.reset_index()
#输出结果:


69bcb17e17a341f0a537f243b8f0db1c.png

reset_index() 方法将 DataFrame 索引重置为默认数字索引,在以下情况下特别有用:

  1. 执行数据整理时——尤其是过滤数据或删除缺失值等预处理操作,会导致较小的 DataFrame 具有不再连续的数字索引
  2. 当索引应该被视为一个常见的 DataFrame 列时
  3. 当索引标签没有提供有关数据的任何有价值的信息时


求交集(A∩B)

3af4649bae6c4edba1e9bf9c5ca774c4.png

# 使用 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))

316642c4fc664de0b0646c820cae0994.png

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

c5d345e7d5c4453db0e8af6b27a1923d.png

首先用交集求出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


@

@

@

相关文章
|
22天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
53 0
|
2月前
|
数据采集 数据可视化 数据挖掘
Pandas函数大合集:数据处理神器一网打尽!
Pandas函数大合集:数据处理神器一网打尽!
38 0
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
79 0
|
22天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
31 2
|
1月前
|
并行计算 大数据 数据处理
亿级数据处理,Pandas的高效策略
在大数据时代,数据量的爆炸性增长对处理技术提出更高要求。本文介绍如何利用Python的Pandas库及其配套工具高效处理亿级数据集,包括:采用Dask进行并行计算,分块读取以减少内存占用,利用数据库进行复杂查询,使用内存映射优化Pandas性能,以及借助PySpark实现分布式数据处理。通过这些方法,亿级数据处理变得简单高效,助力我们更好地挖掘数据价值。
67 1
|
6月前
|
数据可视化 数据挖掘 数据处理
进阶 pandas DataFrame:挖掘高级数据处理技巧
【5月更文挑战第19天】本文介绍了Pandas DataFrame的高级使用技巧,包括数据重塑(如`pivot`和`melt`)、字符串处理(如提取和替换)、日期时间处理(如解析和时间序列操作)、合并与连接(如`merge`和`concat`),以及使用`apply()`应用自定义函数。这些技巧能提升数据处理效率,适用于复杂数据分析任务。推荐进一步学习和探索Pandas的高级功能。
|
1月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
87 3
|
6月前
|
数据处理 索引 Python
使用pandas的merge()和join()函数进行数据处理
使用pandas的merge()和join()函数进行数据处理
111 2
|
2月前
|
数据采集 数据挖掘 数据处理
Pandas实践:南京地铁数据处理分析
Pandas实践:南京地铁数据处理分析
39 2
|
3月前
|
数据采集 数据挖掘 数据处理
解锁Python数据分析新技能!Pandas实战学习,让你的数据处理能力瞬间飙升!
【8月更文挑战第22天】Python中的Pandas库简化了数据分析工作。本文通过分析一个金融公司的投资数据文件“investment_data.csv”,介绍了Pandas的基础及高级功能。首先读取并检查数据,包括显示前几行、列名、形状和数据类型。随后进行数据清洗,移除缺失值与重复项。接着转换日期格式,并计算投资收益。最后通过分组计算平均投资回报率,展示了Pandas在数据处理与分析中的强大能力。
45 0
下一篇
无影云桌面