2020-10-03

pandas:数据修改、数据过滤、数据整合,筛选,合并

 

目录标题

 


1. 导入数据和修改数据

# 导入pandas库
import pandas as pd

读取csv数据

datafile="D:/scene_choice/DataWsu.csv/deviceid.csv"
device=pd.read_csv(datafile)
# 如果csv中没有表头,就要加入head=None参数

创建空的dataframe

df1=pd.DataFrame(columns=['a','b','c','d'])

在这里插入图片描述
用字典生成dataframe

data = {'BoolCol': [1, 2, 3, 3, 4],
        'attr': [22, 33, 22, 44, 66],
        'BoolC': [1, 2, 3, 3, 4],
        'att': [22, 33, 22, 44, 66],
        'Bool': [1, 2, 3, 3, 4]
        }
df4=pd.DataFrame(data)
print(df4)

在这里插入图片描述

给空的dataframe添加数据

df2=pd.DataFrame([[1,2,3,4]],columns=['a','b','c','d'])
df1=df1.append(df2,ignore_index=True)
print(df1)

在这里插入图片描述
参数ignore_indwx=True和flase的区别:ignore_indwx=True忽略原来的index重新生成index;

df3=pd.DataFrame([[5,6,7,8]],columns=['a','b','c','d'])
df1=df1.append(df3)
print(df1)
df1=df1.append(df3,ignore_index=True)
print(df1)

在这里插入图片描述
在指定位置插入列,在b后面插入f:1.更新列明 2.插入数据

方法1:

col_name=df1.columns.tolist()
print(col_name)
col_name.insert(2,'f')
print(col_name)
df1=df1.reindex(columns=col_name)  # DataFrame.reindex() 对原行/列索引重新构建索引值
df1['f']=['2','3','5']
print(df1)

在这里插入图片描述
方法2:

print(df1)
newdata=[9,8,3]
df1.insert(2,'g',newdata)
print(df1)

在这里插入图片描述
取dataframe中的列名

col_name=df1.columns.tolist()
print(col_name)

在这里插入图片描述
在指定位置插入行,eg在df1行索引为1后插入行(先切割再拼接)

newdata=pd.DataFrame([['z','j','y','l','j','l']],columns=['a','b','f','c','d','e'])

方法1:append

newdf1=data1.append(newdata,ignore_index=True).append(data2,ignore_index=True)
print(newdf1)

在这里插入图片描述
方法2:concat

newdf1=pd.concat([data1,newdata,data2],ignore_index=True)
print(newdf1)

在这里插入图片描述

更换单个值

df1.loc[0,'a']='haha'
print(df1)
df1.iloc[0,1]='xixi'   # 用索引位置来查找
print(df1)

在这里插入图片描述

2. 数据筛选

取指定行和列

data1=df1.loc[:1]   # 取0和1行
print(data1)
data2=df1.loc[1:]  # 取1行以后的行(包括1)
print(data2)

在这里插入图片描述
取内容匹配的行

方法1:

print(df1)
match_row=df1[df1['a']==5]
print(match_row)

在这里插入图片描述
方法2:

print(df1)
getdata=[]
match_row=df1[df1['a']==5].index.tolist()  # index.tolist取索引
print(match_row,type(match_row))
for i in match_row:
    getdata.append(df1.loc[i].values)  # values的使用,只获取值,不带列名
getdata=pd.DataFrame(getdata)
getdata.columns=['a','b','f','c','d','e']
print(getdata)

在这里插入图片描述
特定值筛选数据

print(df1)
range_list=['3','5']
data3=df1[df1['f'].isin(range_list)]
print(data3)

在这里插入图片描述
指定范围筛选

data_list=[[4, 8, 6, 3], [6, 1, 7, 2], [7, 2, 8, 3], [1, 8, 2, 7]]
df1=pd.DataFrame(data_list,columns=list('abcd'))
print(df1)
print(df1[['a','c']][df1['d']>2])

在这里插入图片描述
同时筛选出满足多个条件的数据

print(df1)
data4=df1[(df1['a']==5) & (df1['e']==1)]
print(data4)

在这里插入图片描述

3. dataframe合并

data_list=[[4, 8, 6, 3], [6, 1, 7, 2], [7, 2, 8, 3], [1, 8, 2, 7]]
df1=pd.DataFrame(data_list,columns=list('abcd'))
print(df1)
data_list1=[[0, 2, 5, 3], [4, 1, 1, 2], [4, 2, 6, 3], [2, 0, 2, 4]]
df2=pd.DataFrame(data_list1,columns=list('abcd'))
print(df2)

在这里插入图片描述

3.1 concat

df3=pd.concat([df1,df2])
print(df3)

在这里插入图片描述

3.1.1 axis

默认值:axis=0
axis=0:竖方向(index)合并,合并方向index相加,非合并方向columns去并集

df3=pd.concat([df1,df2],axis=0)
print(df3)


axis=1:横方向(columns)合并,合并方向columns相加,给合并方向index去并集

df3=pd.concat([df1,df2],axis=1)
print(df3)

在这里插入图片描述
注意:取并集的行或列名称不能有重复项,eg:df1列明为‘aabb’,则axis=0时会报错。

3.1.2 join

data_list=[[4, 8, 6, 3], [6, 1, 7, 2], [7, 2, 8, 3], [1, 8, 2, 7]]
df1=pd.DataFrame(data_list,columns=list('abcd'))
print(df1)
data_list1=[[0, 2, 5, 3], [4, 1, 1, 2], [4, 2, 6, 3], [2, 0, 2, 4]]
df2=pd.DataFrame(data_list1,columns=list('abfe'))
print(df2)

在这里插入图片描述
默认值:join=’outer’
join=‘outer’:非合并方向的列/行取并集
sort:
axis=0时,sort=False,columns不做排序;sort=Ture,columns做排序。
axis=1时,sort=False,index不做排序;sort=True,index做排序。

df3=pd.concat([df1,df2],axis=0,join='outer',sort=True)
print(df3)
df3=pd.concat([df1,df2],axis=1,join='outer',sort=True)
print(df3)

在这里插入图片描述
在这里插入图片描述
join=‘inner’:非合并方向的行或列名称取交集

df3=pd.concat([df1,df2],axis=0,join='inner',sort=True)
print(df3)
df3=pd.concat([df1,df2],axis=1,join='inner',sort=True)
print(df3)

在这里插入图片描述
在这里插入图片描述

3.1.3 join_axes

默认值:join_axes=None,取并集
axis=0时,join_axes=[df1.columns],合并后columns使用df1的列名。
在这里插入图片描述
axis=1时,join_axes=[df1.index],合并后index使用df2的行名
在这里插入图片描述

3.1.4 ignore_index

默认:ignore_index=False
axis=0时,ignore_index=True,index采用系统默认索引,即从0开始的int;ignore_index=False,维持原来的索引。
axis=0时,ignore_index=True,columns采用系统默认索引,即从0开始的int;ignore_index=False,维持原来的索引。

df3=pd.concat([df1,df2],axis=0,ignore_index=True,sort=True)
print(df3)
df3=pd.concat([df1,df2],axis=0,ignore_index=False,sort=True)
print(df3)

在这里插入图片描述

df3=pd.concat([df1,df2],axis=1,ignore_index=True,sort=True)
print(df3)
df3=pd.concat([df1,df2],axis=1,ignore_index=False,sort=True)
print(df3)

在这里插入图片描述

3.1.5 concat合并多个dataframe

pd.concat([df1,df2,df3],sort=False)

3.2 append

竖方向合并df,没有axis属性,不会就地修改而是创建副本

print(df1.append(df2,sort=True))

在这里插入图片描述

print(df1.append(df2,sort=True,ignore_index=True))

在这里插入图片描述
append多个dataframe合并:

df1.append([df2,df3],sort=True,ignore_index=True)

4. 索引筛选

4.1 切片操作

df[行索引,列索引]或df[[列名1,列名2]]

# 使用切片操作选择特定的行
print(df1)
print(df1[0:2])

在这里插入图片描述

# 使用切片操作选择特定的列
print(df1[['a','d']])

在这里插入图片描述

4.2 loc函数

同时进行行列选取

print(df1.loc[0,'c'])
print(df1.loc[1:2,['a','c']])
print(df1.loc[[1,3],['c','a']])

在这里插入图片描述

4.3 iloc函数

print(df1.iloc[1,2])
print(df1.iloc[1:3,[2,3]])
print(df1.iloc[[1,3],1:3])

在这里插入图片描述

转自:https://www.pythonf.cn/read/51977

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值