DataFrame增删改数据

目录

准备数据

DataFrame添加列

直接添加列数据

使用insert添加列数据

DataFrame删除行列

准备数据

删除行

删除列

DataFrame数据去重


准备数据

import pandas as pd
df = pd.read_csv("../data/b_LJdata.csv")
df

 

DataFrame添加列

直接添加列数据

1)获取前5条数据并复制一份

# 获取前5条数据并复制一份
copy_df = df.head().copy()
copy_df

2) 添加列名为 城市 的一列, 值都为 北京

# 添加一列 城市,值为北京
copy_df['城市']='北京'
copy_df

3)添加列名为 区县 的一列, 值分别是 '朝阳区', '朝阳区', '西城区', '昌平区', '朝阳区'

# 添加列名为 区县 的一列, 值分别是 '朝阳区', '朝阳区', '西城区', '昌平区', '朝阳区'
copy_df['区县']=['朝阳区', '朝阳区', '西城区', '昌平区', '朝阳区']
copy_df

4) 添加列名为 新价格 的一列, 值比原价格列的值多1000元

 

# 添加列名为 新价格 的一列, 值比原价格列的值多1000元
copy_df['新价格'] = copy_df['价格'] +1000
copy_df

使用insert添加列数据

DataFrame的 insert 方法用于在特定位置插入新的列

以下是 df.insert(loc=, column=, value=)的详细解释:

  • 1 参数说明

    • loc:

      • 这是一个整数,表示要插入新列的位置索引。索引从 0 开始,所以 loc=0 表示在最左边插入新列,loc=1 表示在第二列的位置插入新列,依此类推。

    • column:

      • 这是一个字符串,表示新列的名称。

    • value:

      • 可以是一个标量值、列表、数组或其他可迭代对象,它将成为新列的值。如果是标量值,该值将被广播到新列的所有行。如果是可迭代对象,其长度必须与数据框的行数相等。

  • 使用insert方法会直接修改原始的DataFrame对象。如果需要保留原始数据框的副本,可以先对其进行复制。

  • 确保value参数的值与数据框的行数相匹配,否则会引发错误。

  • 如果多次调用insert方法插入多个新列,每次插入都会移动后续的列,可能会影响性能。在某些情况下,可以考虑一次性构建包含所有列的数据框,而不是逐个插入列。

1) 获取前5条数据并复制一份

# 1 获取前5条数据并复制一份
copy_df = df.head().copy()
copy_df

2) 在区域列后添加列名为 城市 的一列, 值都为北京

# 2 在 区域 列后添加列名为 城市 的一列, 值都为北京
# 2.1 获取指定列的索引 df.columns.get_loc(列名)
area = copy_df.columns.get_loc('区域')
print(area)

# 添加新列
copy_df.insert(loc=area+1,column='城市',value='北京')
print(copy_df)

 

3)在城市列后添加列名为 区县 的一列, 值分别是 '朝阳区', '朝阳区', '西城区', '昌平区', '朝阳区'

#%%
# 3 在城市列后添加列名为 区县 的一列, 值分别是 '朝阳区', '朝阳区', '西城区', '昌平区', '朝阳区'
# 3.1 获取指定列的索引 df.columns.get_loc(列名)
city = copy_df.columns.get_loc('城市')
print(city)

# 添加新列
copy_df.insert(loc=city+1,column='区县',value=['朝阳区', '朝阳区', '西城区', '昌平区', '朝阳区'])
print(copy_df)

4) 在价格列后添加列名为 新价格 的一列, 值比原价格列的值多1000元

# 4 在价格列后添加列名为 新价格 的一列, 值比原价格列的值多1000元
# 4.1 获取指定列的索引 df.columns.get_loc(列名)
price = df.columns.get_loc('价格')
print(price)


# 添加新列
copy_df.insert(loc=price+1,column='新价格',value=copy_df['价格']+1000)
print(copy_df)

DataFrame删除行列

pandas中,df.drop(labels=, axis=, inplace=)方法用于删除DataFrame中的行或列。

  • labels

    • 可以是一个标签(例如列名或行索引)或一个标签列表,表示要删除的行或列。

    • 如果是单个标签,将删除对应的一行或一列。如果是列表,则删除多个行或列。

  • axis

    • 决定是删除行还是列。默认值为 0,表示按行删除。如果设置为 1,则表示按列删除。

    • 例如,axis=0可以用来删除特定的行,而axis=1可以用来删除特定的列。

  • inplace

    • 这是一个布尔值参数。如果为True,则直接在原始DataFrame上进行修改,不会返回新的DataFrame。如果为False(默认值),则会返回一个新的DataFrame,原始的DataFrame保持不变。

准备数据

import pandas as pd
df = pd.read_csv('../data/b_LJdata.csv')
df

删除行

1)删除一行数据 原df上并没有删除(完整版)

# 删除行:不在原有基础删除,删除一行
copy_df = df.head().copy()
print("===================删除=============================")
new_df = copy_df.drop(labels=[1],axis=0,inplace= False)
print(new_df)
print("====================删除后======================")
print(copy_df)

2) 删除一行数据 原df上并没有删除(简化版) 

# 删除行:不在原有基础删除,删除一行
copy_df = df.head().copy()
print("===================删除=============================")
new_df = copy_df.drop(labels=[1])
print(new_df)
print("====================删除后======================")
print(copy_df)

3) 删除多行数据 原df上并没有删除 

# 删除多行
copy_df = df.head().copy()
print("===================删除=============================")
new_df = copy_df.drop(labels=[1,2,4],axis=0,inplace= False)
print(new_df)
print("====================删除后======================")
print(copy_df)

4) 删除一行数据 原df上删除

# 在原基础上删除一行
copy_df = df.head().copy()
print("====================删除前======================")
print(copy_df)
print("===================删除=============================")
new_df = copy_df.drop(labels=[1],axis=0,inplace= True)
print(new_df)
print("====================删除后======================")
print(copy_df)

5) 删除多行数据 原df上删除 

# 在原基础上删除多行
copy_df = df.head().copy()
print("====================删除前======================")
print(copy_df)
print("===================删除=============================")
new_df = copy_df.drop(labels=[1,1,3],axis=0,inplace= True)
print(new_df)
print("====================删除后======================")
print(copy_df)

删除列

1) 删除一列数据 原df上并没有删除(完整版)

# 不在原基础上,删除一列
copy_df = df.head().copy()
print("==================删除=====================")
new_df = copy_df.drop(labels=['地址'],axis=1,inplace= False)
print(new_df)
print("===============删除后==================")
print(copy_df)

2) 删除多列数据 原df上并没有删除

# 不在原基础上,删除多列
copy_df = df.head().copy()
print("==================删除=====================")
new_df = copy_df.drop(labels=['地址','价格'],axis=1,inplace= False)
print(new_df)
print("===============删除后==================")
print(copy_df)

3) 删除一列数据 原df上删除

# 在原有基础上,删除一行
copy_df = df.head().copy()
print("==================删除=====================")
new_df = copy_df.drop(labels=['地址'],axis=1,inplace= True)
print(new_df)
print("===============删除后==================")
print(copy_df)

4) 删除多列数据 原df上删除


# 在原基础上,删除多列
copy_df = df.head().copy()
print("==================删除=====================")
new_df = copy_df.drop(labels=['地址','价格'],axis=1,inplace= True)
print(new_df)
print("===============删除后==================")
print(copy_df)

DataFrame数据去重

pandas中,DataFrame.drop_duplicates(subset=, keep=, inplace=)方法用于删除数据框中的重复行。

  • subset

    • 可以是一个列标签或列标签列表,表示根据这些列来判断重复行。

    • 如果指定了subset,则只考虑这些列中的值来确定重复行。例如,如果subset=['col1', 'col2'],那么只有当col1col2列的值完全相同时,才会被认为是重复行。

    • 如果不指定subset,则会考虑所有列来判断重复行。

  • keep

    • 决定保留哪些重复行。可以取以下三个值之一:

      • 'first'(默认值):保留第一次出现的重复行。

      • 'last':保留最后一次出现的重复行。

      • False:删除所有重复行。

  • inplace

    • 这是一个布尔值参数。如果为True,则直接在原始DataFrame上进行修改,不会返回新的DataFrame。如果为False(默认值),则会返回一个新的DataFrame,原始的DataFrame保持不变。

1) 对 '户型', '朝向' 去重, 保留第一条, 不影响原始数据

# 1 对 '户型', '朝向' 去重, 保留第一条, 不影响原始数据
# 1.1 准备测试数据
copy_df = df.head().copy()
print("===============去重========================")
new_df = copy_df.drop_duplicates(subset=['户型', '朝向' ],keep='first',inplace=False)
print(new_df)
print("=================去重后===========================")
print(copy_df)

2) 对 '户型', '朝向' 去重, 保留最后一条, 不影响原始数据

# 2 对 '户型', '朝向' 去重, 保留最后一条, 不影响原始数据
# 1.1 准备测试数据
copy_df = df.head().copy()
print("===============去重========================")
new_df = copy_df.drop_duplicates(subset=['户型', '朝向' ],keep='last',inplace=False)
print(new_df)
print("=================去重后===========================")
print(copy_df)

3) 对 '户型', '朝向' 去重, 删除所有重复数据, 不影响原始数据

# 3 对 '户型', '朝向' 去重, 删除所有重复数据, 不影响原始数据
# 3.1 准备测试数据
copy_df = df.head().copy()
print("===============去重========================")
new_df = copy_df.drop_duplicates(subset=['户型', '朝向' ],keep=False,inplace=False)
print(new_df)
print("=================去重后===========================")
print(copy_df)

4) 对 '户型', '朝向' 去重, 保留第一条, 影响原始数据

# 4 对 '户型', '朝向' 去重, 保留第一条, 影响原始数据
# 4.1 准备测试数据
copy_df = df.head().copy()
print("===============去重========================")
new_df = copy_df.drop_duplicates(subset=['户型', '朝向' ],keep='first',inplace=True)
print(new_df)
print("=================去重后===========================")
print(copy_df)

5) 对 '户型', '朝向' 去重, 保留最后一条, 影响原始数据

# 5 对 '户型', '朝向' 去重, 保留最后一条, 影响原始数据
# 5.1 准备测试数据
copy_df = df.head().copy()
print("===============去重========================")
new_df = copy_df.drop_duplicates(subset=['户型', '朝向' ],keep='last',inplace=True)
print(new_df)
print("=================去重后===========================")
print(copy_df)

6) 对 '户型', '朝向' 去重, 删除所有重复数据, 影响原始数据

# 6 对 '户型', '朝向' 去重, 删除所有重复数据, 影响原始数据
# 6.1 准备测试数据
copy_df = df.head().copy()
print("===============去重========================")
new_df = copy_df.drop_duplicates(subset=['户型', '朝向' ],keep=False,inplace=True)
print(new_df)
print("=================去重后===========================")
print(copy_df)

7) 简化版1 对 '户型', '朝向' 去重

# 7 简化版1 对 '户型', '朝向' 去重
# 7.1 准备测试数据
copy_df = df.head().copy()
print("===============去重========================")
new_df = copy_df.drop_duplicates(subset=['户型', '朝向' ])
print(new_df)
print("=================去重后===========================")
print(copy_df)

8) 简化版2 对 所有列 去重

# 8 简化版2 对 所有列 去重
# 8.1 准备测试数据
copy_df = df.head().copy()
print("===============去重========================")
new_df = copy_df.drop_duplicates()
print(new_df)
print("=================去重后===========================")
print(copy_df)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值