# 导入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'])
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)
print(df1)
newdata=[9,8,3]
df1.insert(2,'g',newdata)
print(df1)
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)
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)
取指定行和列
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)
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)
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)
df3=pd.concat([df1,df2])
print(df3)
默认值: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时会报错。
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)
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)
默认值:join_axes=None,取并集
axis=0时,join_axes=[df1.columns],合并后columns使用df1的列名。
axis=1时,join_axes=[df1.index],合并后index使用df2的行名
默认: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)
pd.concat([df1,df2,df3],sort=False)
竖方向合并df,没有axis属性,不会就地修改而是创建副本
print(df1.append(df2,sort=True))
print(df1.append(df2,sort=True,ignore_index=True))
df1.append([df2,df3],sort=True,ignore_index=True)
df[行索引,列索引]或df[[列名1,列名2]]
# 使用切片操作选择特定的行
print(df1)
print(df1[0:2])
# 使用切片操作选择特定的列
print(df1[['a','d']])
同时进行行列选取
print(df1.loc[0,'c'])
print(df1.loc[1:2,['a','c']])
print(df1.loc[[1,3],['c','a']])
print(df1.iloc[1,2])
print(df1.iloc[1:3,[2,3]])
print(df1.iloc[[1,3],1:3])