pandas:数据修改、数据筛选、数据合并

目录标题

      • 1. 导入数据和修改数据
      • 2. 数据筛选
      • 3. dataframe合并
        • 3.1 concat
          • 3.1.1 axis
          • 3.1.2 join
          • 3.1.3 join_axes
          • 3.1.4 ignore_index
          • 3.1.5 concat合并多个dataframe
        • 3.2 append
      • 4. 索引筛选
        • 4.1 切片操作
        • 4.2 loc函数
        • 4.3 iloc函数


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'])

pandas:数据修改、数据筛选、数据合并_第1张图片
用字典生成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)

pandas:数据修改、数据筛选、数据合并_第2张图片

给空的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)

pandas:数据修改、数据筛选、数据合并_第3张图片
在指定位置插入列,在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)

pandas:数据修改、数据筛选、数据合并_第4张图片
方法2:

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

pandas:数据修改、数据筛选、数据合并_第5张图片
取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)

pandas:数据修改、数据筛选、数据合并_第6张图片
方法2:concat

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

pandas:数据修改、数据筛选、数据合并_第7张图片

更换单个值

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

pandas:数据修改、数据筛选、数据合并_第8张图片

2. 数据筛选

取指定行和列

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

pandas:数据修改、数据筛选、数据合并_第9张图片
取内容匹配的行

方法1:

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

pandas:数据修改、数据筛选、数据合并_第10张图片
方法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)

pandas:数据修改、数据筛选、数据合并_第11张图片
特定值筛选数据

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

pandas:数据修改、数据筛选、数据合并_第12张图片
指定范围筛选

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

pandas:数据修改、数据筛选、数据合并_第13张图片
同时筛选出满足多个条件的数据

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

pandas:数据修改、数据筛选、数据合并_第14张图片

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)

pandas:数据修改、数据筛选、数据合并_第15张图片

3.1 concat

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

pandas:数据修改、数据筛选、数据合并_第16张图片

3.1.1 axis

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

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

pandas:数据修改、数据筛选、数据合并_第17张图片
axis=1:横方向(columns)合并,合并方向columns相加,给合并方向index去并集

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

pandas:数据修改、数据筛选、数据合并_第18张图片
注意:取并集的行或列名称不能有重复项,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)

pandas:数据修改、数据筛选、数据合并_第19张图片
默认值: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)

pandas:数据修改、数据筛选、数据合并_第20张图片
pandas:数据修改、数据筛选、数据合并_第21张图片
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)

pandas:数据修改、数据筛选、数据合并_第22张图片
pandas:数据修改、数据筛选、数据合并_第23张图片

3.1.3 join_axes

默认值:join_axes=None,取并集
axis=0时,join_axes=[df1.columns],合并后columns使用df1的列名。
pandas:数据修改、数据筛选、数据合并_第24张图片
axis=1时,join_axes=[df1.index],合并后index使用df2的行名
pandas:数据修改、数据筛选、数据合并_第25张图片

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)

pandas:数据修改、数据筛选、数据合并_第26张图片

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)

pandas:数据修改、数据筛选、数据合并_第27张图片

3.1.5 concat合并多个dataframe
pd.concat([df1,df2,df3],sort=False)

3.2 append

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

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

pandas:数据修改、数据筛选、数据合并_第28张图片

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

pandas:数据修改、数据筛选、数据合并_第29张图片
append多个dataframe合并:

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

4. 索引筛选

4.1 切片操作

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

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

pandas:数据修改、数据筛选、数据合并_第30张图片

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

pandas:数据修改、数据筛选、数据合并_第31张图片

4.2 loc函数

同时进行行列选取

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

pandas:数据修改、数据筛选、数据合并_第32张图片

4.3 iloc函数

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

pandas:数据修改、数据筛选、数据合并_第33张图片

你可能感兴趣的:(python)