Series一维,DataFrame二维,是pandas的核心
Series的创建
方法一:用ndarray创建,传递一个列表或数组
s = Series(data = np.random.randint (0,150,size = 10),index =list('abcdefghij'),name = 'python')
'''Out[4]:
a 106
b 98
c 75
d 25
e 70
f 105
g 99
h 148
i 124
j 19
Name: python, dtype: int32
'''
#方法2:通过字典来创建(key,value)
s2 = Series({'a':110,'b':120,'c':130,'d':140})
'''
Out[5]:
a 110
b 120
c 130
d 140
dtype: int64
'''
type(s)
'''
Out[6]: pandas.core.series.Series
'''
#索引
s[['d','e','e','f']]#这是显式索引
'''
Out[10]:
d 16
e 143
e 143
f 90
Name: python, dtype: int32
'''
s[[2,-1,-3,4]]#这是隐式索引
'''
Out[11]:
c 61
j 49
h 125
e 143
Name: python, dtype: int32
'''
s.iloc[[0,2,1]]#通过隐式索引调用
s.loc[['a','c','c']]#通过显式索引调用
#切片
s['a':'f']
s['a':'w']#索引w不存在,则从a取到末尾
s[::2]
s['b':'j':-1]#原理与numpy相同,同样也可以加上loc或者iloc
#series的一些属性:
s.shape() s.size() s.index() s.value()#后面这两个返回一个ndarray
s.head(n) s.tail(n)#展示数据的前、后n个数据,默认5个
#空值的处理:
s[['b','d']] = np.NaN
'''
Out[15]:
a 96.0
b NaN
c 61.0
d NaN
e 143.0
f 90.0
g 118.0
h 125.0
i 76.0
j 49.0
Name: python, dtype: float64
'''
cond = s.isnull()#查找空数据,返回一个全是布尔值的列表,为空的值是true
s[cond]#提取所有空值
cond = s.notnull()
s[cond]#提取所有非空值
#给一个series起名
s2.name = 'Math'
s2+10#效果作用在每一个元素上,广播效果
s.add(10)#与上一行效果相同
s.add(10,fill_value = 10)#把所有NaN数据填充成10,然后再进行加法运算
s.astype(int8)#改变数据类型,只改value部分,不改index部分
#还有一些统计学函数,s.pow(2),s.std(),s.max()等等,和numpy相同
s.value_counts()#统计每个数据出现的次数
#一个实例,#统计每个类型的文件出现次数
a = ['aaaa.mp3','bbbb.mp4','cccc.mp3','dddd.avi']
def count_(a):
return Series([i.split('.')[-1] for i in a]).value_counts()
count_(a)
'''
Out[17]:
mp3 2
mp4 1
avi 1
dtype: int64
'''
datafarame***核心中的核心,非常重要,一行是一个样本,一列是一个属性
#创建:
df = DataFrame(data = {'python':np.random.randint(0,150,size = 5),
'MATH':np.random.randint(0,150,size = 5),
'English':np.random.randint(0,150,size = 5)},
index = list('ABCDE'))
'''
Out[22]:
python MATH English
A 32 121 89
B 40 119 119
C 136 86 103
D 36 70 119
E 93 111 111
'''
#创建方式2:
df2 = DataFrame(data = np.random.randint(0,150,size = (5,4)),
index = list('abcde'),
columns = list(['python','math','english','chinese']))
'''
Out[25]:
python math english chinese
a 90 144 35 59
b 79 52 128 119
c 61 121 8 12
d 141 96 139 17
e 75 90 46 142
'''
#文件的保存:下面的方法如果原文件存在,则会将其覆盖
df2.to_csv('C:\\Users\\shm\\Desktop\\python_data\\data\\df2.csv')
df2.to_excel('C:\\Users\\shm\\Desktop\\python_data\\data\\df2.xlsx')
#文件的读取:
df3 = pd.read_csv('C:\\Users\\shm\\Desktop\\python_data\\data\\df2.csv')#再读回来索引就变成了一种属性
'''
Out[28]:
Unnamed: 0 python math english chinese
0 a 90 144 35 59
1 b 79 52 128 119
2 c 61 121 8 12
3 d 141 96 139 17
4 e 75 90 46 142
'''
#把第一列变成索引的方法:
df3 = df3.rename(mapper = {'Unnamed: 0':'index'},axis = 1)#axis = 0是默认值,会在行名中检索index,所以不会有变化
df3
df3.set_index(keys = 'index')
#dataframe的一些属性:
df.shape() df.size()等,方法与前面类似
#dataframe其实就是就是多个series组成共用一个index
#dataframe获取某列数据的方法:
df.python 或 df['math'] df[['math','python']]
#获取某行的方法:用.或者[]都不行,用loc
df2.loc[['a','c']]
df2.iloc[[1,2]]#与series相同
#获取某一元素
df2['math']['b']#先列后行
df2.loc['b']['math']#先行后列
df2.loc['index','columns']
#切片
df2['a':'c']#不能直接对列切片
#列切片的唯一方法:
df2.iloc[:,1:3]
#dataframe的运算:加减乘除都有广播效果
df2.cov() #协方差
'''
Out[48]:
python math english chinese
python 946.20 -33.15 1260.95 -660.20
math -33.15 1198.80 -1416.40 -1140.35
english 1260.95 -1416.40 3440.70 359.80
chinese -660.20 -1140.35 359.80 3469.70
'''
df2.corr()#相关性系数
'''
Out[49]:
python math english chinese
python 1.000000 -0.031126 0.698848 -0.364366
math -0.031126 1.000000 -0.697412 -0.559138
english 0.698848 -0.697412 1.000000 0.104134
chinese -0.364366 -0.559138 0.104134 1.000000
'''
df2.describe()#很好用
'''
Out[50]:
python math english chinese
count 5.000000 5.000000 5.00000 5.000000
mean 89.200000 100.600000 71.20000 69.800000
std 30.760364 34.623691 58.65748 58.904159
min 61.000000 52.000000 8.00000 12.000000
25% 75.000000 90.000000 35.00000 17.000000
50% 79.000000 96.000000 46.00000 59.000000
75% 90.000000 121.000000 128.00000 119.000000
max 141.000000 144.000000 139.00000 142.000000
'''
两个数据框进行加减乘除,对应元素进行加减乘除,多余的元素填充NaN补齐,想用别的元素补齐,用df.add(df2,fill_value = n)
#Series与dataframe之间的运算:
'''对下面这个dataframe进行操作
out[4]:
python MATH English
A 112 51 69
B 127 144 109
C 44 79 22
D 123 95 104
E 59 47 70
'''
s = df.loc['A']#取一行
df.add(s)#对每一行执行add操作,默认axis = 0或columns,每一行加上这个series,axis = 1或index对每一列遍历相加
'''
python MATH English
A 224 102 138
B 239 195 178
C 156 130 91
D 235 146 173
E 171 98 139
'''