欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的那一行

相关标签: pandas