python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

文章目录

*
一、准备工作
二、数据合并

+ 1、merge数据表连接
+ 2、添加数据
三、数据提取

+ 1、索引列
+ 2、loc函数(⭐)
+ 3、ix函数
+ 4、iloc函数
+ 5、排序
+ 6、特定标记
+ 7、分列
+ 8、提取字符生成新表
+ 9、isin条件提取

一、准备工作

导入库+创建数据表

import numpy as np
import pandas as pd

df1 = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],
 "date":pd.date_range('20220102', periods=6),
  "city":['Beijing ', 'Hangzhou', 'Shanghai', 'Beijing', 'Shanghai', 'Shanghai'],
 "age":[31,27,25,27,29,28],
 "category":['100-B','100-B','110-A','110-C','210-C','130-F'],
  "price":[1000,np.nan,2300,5400,np.nan,3330]},
  columns =['id','date','city','category','age','price'])

col={'id':[1001,1002,1003,1004,1005,1006,1007,1008,1009],
    'gender':['F','M','F','F','M','M','M','F','F'],
    'name':['Jane','Wan','Summer','Flore','Wang','Chung','Dev','Linda','Lucy',],
    'salary':[3000,5500,3500,4600,4500,6000,3800,6500,3500]}

df2 = pd.DataFrame(col,
                columns =['id','gender','name','salary'])

二、数据合并

1、merge数据表连接

类似SQL中的join on,内连接、左连接、右连接、外连接


df_inner=pd.merge(df1,df2,how='inner')
df_left=pd.merge(df1,df2,how='left')
df_right=pd.merge(df1,df2,how='right')
df_outer=pd.merge(df1,df2,how='outer')

print(df_inner)
print(df_left)
print(df_right)
print(df_outer)

内连接结果:

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

2、添加数据

1)append追加
两个表上下进行连接,不匹配的字段则将值设置为NaN

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)
2)concat连接
一中简单纵向连接,可以用于不同行不同列,表之间或者列之间

df_concat = pd.concat([df1,df2], axis=0, join='outer', ignore_index=False,
            keys=None, levels=None, names=None, verify_integrity=False,
            sort=False, copy=True)

df_concat = pd.concat([df1.id,df2.name], axis=0, join='outer', ignore_index=False,
            keys=None, levels=None, names=None, verify_integrity=False,
            sort=False, copy=True)
print(df_concat)

df1的id字段与df2的name字段进行连接:

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

三、数据提取

1、索引列


df1.set_index('id')

df_inner.loc[5]

df_inner.iloc[0:3]

df_inner.reset_index()

2、loc函数(⭐)

利用切片原理,使用loc函数进行切片操作时只能使用行名或者列名,也就是索引(行名)和字符串(列名)。
1)索引操作

df_inner.loc[:4]
df_inner.loc[2:4]

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

2)索引+列名操作

df_inner.loc[2:4,'age':'name']
df_inner.loc[:5,"city":"salary"]

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

3)特殊索引名操作
索引是默认的01234,而不是date,但是这里仍然可以选取到数据,导致索引模糊不清因此这种方法不常用,常用的是明确的索引定位。

df_inner.loc['2022-01-02':]
df_inner.loc[:'2022-01-05']

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)
4)特殊索引+列名操作
df_inner.loc['2022-01-02':,'age':'name']
df_inner.loc[:'2022-01-05',:]

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)
5)自定义索引+自定义列名

df_inner.set_index('id',inplace=True)

df_inner.rename(columns={'city':'城市'},inplace=True)

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)
提取id为1002-1005的’城市’列到’name’列信息:

df_inner.loc[1002:1005]
df_inner.loc[:,'城市':'name']

df_inner.loc[1002:1005,'城市':'name']

3、ix函数

1)ix出现问题:AttributeError: ‘DataFrame’ object has no attribute ‘ix’

2)解决思路:
s.ix[:3]返回的结果与s.loc[:3]一样,这是因为如果series的索引是整型的话,ix会首先去寻找索引中的标签3而不是去找位置3,因此造成了一些混乱

3)解决方法:pandas的1.0.0版本后,已经对该函数进行了升级和重构。
只需要将
column01 = dataset.ix[:, 'first']
改为
column01 = dataset.loc[:,'first']

也就是将ix函数名改为loc即可。

4、iloc函数

1)iloc函数则和loc函数相反,只能使用默认的数字索引,不能使用自定义的行列名字索引


df_inner.iloc[:4,:5]
df_inner.iloc[1:3,2:]

注意:冒号前后的数字不再是索引的标签名称,而是数据所在的位置.

2)按位置单独提取数据(间隔提取)

df_inner.iloc[[0,2,5],[4,5]]

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

5、排序


 df1.sort_index(ascending=False)

df2.sort_values(by='salary',ascending=False)

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

6、特定标记

相当于SQL中的CASE WHEN


df_inner['level'] = np.where(df_inner['salary'] > 3000,'high','low')
print(df_inner)

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

df_inner.loc[(df_inner['city'] == 'Shanghai') & (df_inner['salary'] >= 4000), 'level']=1
print(df_inner)

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

7、分列

将category字段的值依次进行分列,
并创建2个新列组成新表,
索引值为df_inner的id,
列名称分别为category和size

pd.DataFrame((x.split('-') for x in df_inner['category']),index=df_inner.id, columns=['category','size'])

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

8、提取字符生成新表

提取前三个字符,并生成数据表

df3=pd.DataFrame(df_inner['name'].str[:3])
df3.set_index('name')
print(df3)

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

9、isin条件提取


df_inner['city'].isin(['Shanghai'])

df_inner.loc[df_inner['city'].isin(['Beijing','Shanghai'])]

python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

Original: https://blog.csdn.net/Viewinfinitely/article/details/124759115
Author: Chung丶无际鹰
Title: python数据分析之pandas数据预处理(数据合并与数据提取、loc、iloc、ix函数详解)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/600327/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球