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


@

@

@

相关文章
|
1天前
|
数据挖掘 数据处理 开发者
Pandas高级数据处理:实时数据处理
本文介绍了Pandas在实时数据处理中的应用,涵盖基础概念、常见问题及解决方案。Pandas是Python中强大的数据分析库,支持流式读取和增量更新数据,适用于大规模数据集的处理。通过分块读取、数据类型优化等方法,可有效解决内存不足等问题。文中还提供了代码示例,帮助读者更好地理解和掌握Pandas在实时数据处理中的使用技巧。
33 15
|
4天前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
57 31
|
5天前
|
数据采集 并行计算 数据可视化
Pandas高级数据处理:数据报告生成实战指南
数据报告生成面临数据质量、计算性能、呈现形式和自动化等核心挑战。常见问题包括缺失值导致统计失真、内存溢出及可视化困难。解决方案涵盖数据清洗、分块处理、安全绘图模板等。通过模块化设计、异常处理机制和性能优化策略,如使用`category`类型、并行计算等,可大幅提升效率。最佳实践建议建立数据质量检查清单、版本控制和自动化测试框架,确保系统具备自适应能力,提升报告生成效率300%以上。
38 12
|
6天前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:交互式数据探索
Pandas 是数据分析中常用的数据处理库,提供了强大的数据结构和操作功能。本文从基础到高级,逐步介绍 Pandas 中交互式数据探索的常见问题及解决方案,涵盖数据读取、检查、清洗、预处理、聚合分组和可视化等内容。通过实例代码,帮助用户解决文件路径错误、编码问题、数据类型不一致、缺失值处理等挑战,提升数据分析效率。
76 32
|
7天前
|
存储 安全 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数据驱动的时代,数据安全和隐私保护至关重要。本文探讨了使用Pandas进行数据分析时如何确保数据的安全性和隐私性,涵盖法律法规要求、用户信任和商业价值等方面。通过加密、脱敏、访问控制和日志审计等技术手段,结合常见问题及解决方案,帮助读者在实际项目中有效保护数据。
52 29
|
8天前
|
存储 安全 数据处理
Pandas高级数据处理:数据加密与解密
本文介绍如何使用Pandas结合加密库(如`cryptography`)实现数据加密与解密,确保敏感信息的安全。涵盖对称和非对称加密算法、常见问题及解决方案,包括密钥管理、性能优化、字符编码和数据完整性验证。通过示例代码展示具体操作,并提供常见报错的解决方法。
47 24
|
10天前
|
存储 算法 数据处理
Pandas高级数据处理:数据压缩与解压
本文介绍 Pandas 中的数据压缩与解压技术,探讨其在大数据集存储、远程传输和备份归档中的应用场景。Pandas 支持多种压缩格式(如 `.gzip`、`.bz2`、`.zip`),通过 `compression` 参数轻松实现数据的压缩与解压。文中还提供了常见问题的解决方案,如文件扩展名不匹配、内存不足和性能优化,并介绍了自动检测压缩格式和组合压缩加密的高级技巧。掌握这些功能可显著提升数据处理效率。
46 20
|
11天前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
138 100
Pandas高级数据处理:数据流式计算
|
12天前
|
数据采集 数据挖掘 物联网
Pandas高级数据处理:实时数据处理
本文介绍了如何使用Pandas进行实时数据处理,涵盖从基础到高级的技巧。Pandas作为Python中流行的数据处理库,提供了高效的DataFrame和Series结构,适用于金融、社交媒体和物联网等领域的数据分析。文章详细讲解了数据读取、清洗、转换及常见问题的解决方案,如内存不足、数据不一致和性能瓶颈,并提供了避免常见报错的方法,帮助读者更高效地处理实时数据。
53 15
|
13天前
|
存储 数据采集 数据挖掘
Pandas高级数据处理:数据流处理
Pandas是Python中高效处理数据分析的流行库。随着数据量增长,传统的批量处理方式难以满足实时性需求,掌握Pandas的数据流处理技术尤为重要。常见问题包括文件格式不兼容、内存不足、缺失值和重复数据等。针对这些问题,可以通过指定参数读取文件、分块读取、填充或删除缺失值、去除重复数据、转换数据类型等方法解决。此外,还需注意KeyError、ValueError和MemoryError等常见报错,并采取相应措施。掌握这些技巧可提高数据处理效率和准确性。
54 26