pandas库
程序员文章站
2022-05-20 10:58:32
...
【1】
pandas.cut() #将数据进行切分
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
'''
x,类array对象,且必须为一维,待切割的原形式
bins, 整数、序列尺度、或间隔索引。如果bins是一个整数,它定义了x宽度范围内的等宽面元数量,但是在这种情况下,x的范围在每个边上被延长1%,以保证包括x的最小值或最大值。如果bin是序列,它定义了允许非均匀bin宽度的bin边缘。在这种情况下没有x的范围的扩展。
right,布尔值。是否是左开右闭区间
labels,用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
retbins,布尔值。是否返回面元
precision,整数。返回面元的小数点几位
include_lowest,布尔值。第一个区间的左端点是否包含
'''
import numpy as np
import pandas as pd
factors = np.random.randn(9)
print(pd.cut(factors, 3)) #切分为三个区间段
注意:返回值的形式为:
[(-0.688, 0.207], (0.207, 1.102], (0.207, 1.102], (0.207, 1.102], (-1.586, -0.688], (-0.688, 0.207], (-1.586, -0.688], (0.207, 1.102], (-0.688, 0.207]]
其含义为每个数包含的区间。
【2】
pandas数据进行合并:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
'''
#concatennating 合并
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)
#axis=0代表按照列进行合并
#ingnor_index代表葫忽略行号,重新排序
res = pd.concat([df1,df2,df3],axis=0,ignore_index=True)
print(res)
'''
'''
#join['inner','outer']
df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','e'])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
#join=outer代表使用的是nan来填充没有的数据
#join=inner代表的是把双方都没有的去掉
res = pd.concat([df1,df2],axis=0,join='inner',ignore_index=True)
print(res)
'''
'''
#join_axes代表使用谁的标号进行合并(横向合并)
df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','e'],index=[1,2,3])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'],index=[2,3,4])
res = pd.concat([df1,df2],axis=1,join_axes=[df1.index])
print(res)
'''
'''
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'])
s1 = pd.Series([1,2,3,4],index=['a','b','c','d'])
print(s1)
#在df1上进行扩展df2和df3,也就是把另外两个加到后面
res = df1.append([df2,df3],ignore_index=True)
res1 = df1.append(s1,ignore_index=True)
print(res)
print(res1)
'''
'''
#进行左右合并
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']})
print(left)
print(right)
res = pd.merge(left,right,on="key")
print(res)
'''
'''
# consider two keys
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']})
print(left)
print(right)
res = pd.merge(left, right, on=['key1', 'key2'], how='inner') # default for how='inner'
print(res)
#使用inner的合并方法:只合并key1,key2相同的
#A0 B0 K0 K0与C0 D0 K0 K0相同,进行合并
#A2 B2 K1 K0与C1 D1 K1 K0相同,进行合并
#A2 B2 K1 K0与C2 D2 K1 K0也相同,也需要进行合并
# how = ['left', 'right', 'outer', 'inner']
res = pd.merge(left, right, on=['key1', 'key2'], how='left')
print(res)
'''
#Series
data = pd.Series(np.random.rand(1000),index=np.arange(1000))
data = data.cumsum()
data.plot()
plt.show()
【3】
pandas.DataFrame.groupby()
import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':list('aabba'),
'key2': ['one','two','one','two','one'],
'data1': np.random.randn(5),
'data2': np.random.randn(5)})
grouped = df['data1'].groupby(df['key1'])
#可以对groupd进行一系列的操作
print(grouped.count()) #返回的数据结构为Series数据结构
print(pd.DataFrame(grouped.count())) #返回的数据结构为DataFrame的数据结构
【4】
loc和iloc
loc意义:通过行标签索引行数据
iloc[n]表示索引的是第n行(index 是整数)
loc[‘d’]表示索引的是第’d’行(index 是字符)
iloc :通过行号获取行数据,不能是字符 #建议使用
ix——结合前两种的混合索引 #建议不使用
【5】
pandas.get_dumies(def['key']) #进行one-hot编码
返回的数据也是pandas.DateFrame的数据结构
【6】
pandas.DataFrame.drop()
参数表:axis=1(按列方向操作)、inplace=True(修改完数据,在原数据上保存)
如果inplace不设置为True的话,就必须将修改过的数据赋值给新的变量,原数据不会发生改变
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)
#axis=0代表按照列进行合并
#ingnor_index代表葫忽略行号,重新排序
res = pd.concat([df1,df2,df3],axis=0,ignore_index=True)
print(res)
#默认的删除为某一行
res1 = res.drop(['a'],axis=1,inplace=False)
print(res)
print(res1)
当然,删除也可以按照第几行第几列进行删除
res.drop(res.columns[1],axis=1,inplace=True) #删除第一列,下标为1的那一列
#注意!!!!!若一次项删除很多列,必须提前赋值
若:
res.drop(res.columns[0,1],axis=1,inplace=True) #会抱错,因为参数过多
正确的写法:
x = [0,1]
res.drop(res.columns[x],axis=1,inplace=True)#这样会删除下标为[0,1]的列
或者;
res.drop(res.columns['a','b'],axis=1,inplace=True)也可以是实现
#删除行
res.drop([1],axis=0,inplace=True) #删除第一行,下标为1的那一行