pandas
pandas 和numpy的关系就像
字典和list的关系
s = pd.Series([-1,3,5,np.nan,9,12])
print(s)
#从20220101开始生成日期,周期是6
dates = pd.date_range('20220101',periods=6)
print(dates)
#随机生成六行四列的数据,行名称是日期,列名称是'啊','对','对','对'
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['啊','对','对','对'])
print(df)
pandas 排序
# 不指定行列的名称的时候,默认是数字
df = pd.DataFrame(np.arange(12).reshape(3,4))
print(df)
# df里面放入字典数据
df1 = pd.DataFrame({'1':2.5,
'2':pd.Timestamp('20220428'),
'3':np.array([7]*4,dtype=int),
'4':pd.Categorical(["hr","boss","emp","man"]),
'5':"default"
})
print(df1)
# 查看类型
print(df1.dtypes)
#查看行名
print(df1.index)
# 查看列名
print(df1.columns)
# 查看值
print(df1.values)
#describe只能运算数字
print(df1.describe())
#转置
# print(df1.T)
# df1.sort_index中文倒叙按照什么?
print(df1.sort_index(axis=1,ascending=False))
print(df1.sort_index(axis=0,ascending=False))
#按某一列的值排序
print(df1.sort_values(by='4',ascending=False))#记得要加''号
pandas选择指定数据
#生成数据,6行4列
dates = pd.date_range('20220428',periods=6)
df = pd.DataFrame(np.arange(24).reshape(6,4),
index=dates,
columns=['a','b','c','d'])
print(df)
print(df.a)
print('不能说一模一样,简直就是毫无差别')
print(df['a'])
# 按照标签/索引取值
print(df.loc['20220501'])
#:代表所有行,'a'代表a这一列
print(df.loc[:,'a'])
#取具体的值
print(df.loc['20220501',['b','c']])
# 按照位置绝对位置取值
#左边代表行,右边代表列
print(df.iloc[0,1])
#筛选某一区域
print(df.iloc[1:3,1:3])
#跳着筛选
print(df.iloc[1:4,[0,3]])
#找b那一列大于12的
print(df.b>12)
#显示为true的所有行
print(df[df.c>12])
pandas改变指定位置的值
#改变某个位置的值
df.iloc[1,1] = 2
df.loc['20220501','c'] = '13a'
df.d[df.a>19] = 22
#增加新的一列
df['e'] = 'error'
print(df)
#人为产生一个空值
df.iloc[(3,2)] = np.nan
#how有两种选择'any'和'all',
# any代表有一个nan就可以删除,
# all代表都是nan才可以删除
print(df.dropna(axis=1,how='any'))
print(df.dropna(axis=0,how='any'))
print(df.fillna(value=0))
#找哪一些值是nan
print(df.isnull())
#判断是否存在nan值
print(np.any(df.isnull()) == True)
print(np.any(df.isnull()))
pandas 处理文件
# pandas 读取csv
data = pd.read_csv("Student.csv",sep='\t')
print(data)
data.to_pickle("student.pickle")
print(data['Name'])
pandas 合并数据
#pandas合并
#创建数据
df1 = pd.DataFrame(np.ones((3,4))*0,
columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1,
columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*2,
columns=['a','b','c','d'])
# print(df1)
# print(df2)
# print(df3)
#叠俄罗斯方块
#索引不会改变
res = pd.concat([df1,df2,df3],axis=0)
#重建索引
res = pd.concat([df1,df2,df3],axis=0,ignore_index=True)
print(res)
#pandas合并
#创建数据
df1 = pd.DataFrame(np.ones((3,4))*0,
columns=['a','b','c','d'],
index=[1,2,3])
df2 = pd.DataFrame(np.ones((3,4))*1,
columns=['b','c','d','e'],
index=[2,3,4])
df3 = pd.DataFrame(np.ones((3,4))*2,
columns=['c','d','e','f'],
index=[3,4,5])
# print(df1)
# print(df2)
# print(df3)
#join 内连接,外连接
res = pd.concat([df1,df2])
print(res)
res = pd.concat([df1,df2],join='outer')#默认是outer
print(res)
#inner 会找出相同的部分
res = pd.concat([df1,df2],join='inner',ignore_index=True)
print(res)
#数据追加
res = df1.append(df2,ignore_index=True)
print(res)
#左右合并
res = pd.concat([df1,df2,df3],axis=1)
print(res)
pandas Merge
#创建数据
left = pd.DataFrame({'key':['K0','K1','K2','K3'],
'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3']})
right = pd.DataFrame({'key':['K0','K1','K2','K3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
# 根据key合并
res = pd.merge(left,right,on='key')
print(res)
#创建数据
left = pd.DataFrame({'key1':['K0','K0','K1','K2'],
'key2':['K0','K1','K0','K1'],
'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3']})
right = pd.DataFrame({'key1':['K0','K1','K1','K2'],
'key2':['K0',"K0","K0","K0"],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
# 根据key合并
print(left)
print(right)
res = pd.merge(left,right,on=['key1','key2'])
print(res)
# key1 key2 A B
# 0 K0 K0 A0 B0
# 1 K0 K1 A1 B1
# 2 K1 K0 A2 B2
# 3 K2 K1 A3 B3
# key1 key2 C D
# 0 K0 K0 C0 D0
# 1 K1 K0 C1 D1
# 2 K1 K0 C2 D2
# 3 K2 K0 C3 D3
# key1 key2 A B C D
# 0 K0 K0 A0 B0 C0 D0
# 1 K1 K0 A2 B2 C1 D1
# 2 K1 K0 A2 B2 C2 D2
# 根据key合并
print(left)
print(right)
#how {'left','right','inner','outer'}
res = pd.merge(left,right,on=['key1','key2'],how='inner')
print(res)
res = pd.merge(left,right,on=['key1','key2'],how='outer')
print(res)
res = pd.merge(left,right,on=['key1','key2'],how='left')
print(res)
res = pd.merge(left,right,on=['key1','key2'],how='right')
print(res)
#indicator 能看到怎么合并的
res = pd.merge(left,right,on=['key1','key2'],how='inner',indicator=True)
print(res)
res = pd.merge(left,right,on=['key1','key2'],how='outer',indicator=True)
print(res)
res = pd.merge(left,right,on=['key1','key2'],how='left',indicator=True)
print(res)
res = pd.merge(left,right,on=['key1','key2'],how='right',indicator=True)
print(res)
#pandas合并
#创建数据
boys = pd.DataFrame({'k':['K0','K1','K2'],
'age':[18,20,23]})
girls = pd.DataFrame({'k':['K0','K0','K3'],
'age':[24,25,26]})
print(boys)
print(girls)
#同属性字段合并
res = pd.merge(boys,girls,on='k',suffixes=['_boys','_girls'],how='outer')
print(res)
pandas 画图
#Series
# data = pd.Series(np.random.randn(1000),index=np.arange(1000))
# data = data.cumsum()
#DataFrame
data = pd.DataFrame(np.random.randn(1000,4),
index=np.arange(1000),
columns=list("abcd"))
data = data.cumsum()
print(data.head())
#plot 能画什么图
# bar,hist,box,kde,area,scatter,hexbin,pie
ax = data.plot.scatter(x='a',y='b',color='blue')
data.plot.scatter(x='c',y='d',color='red',ax=ax)
plt.show()