1.pandas介绍
1.什么是pandas
pand - panel data为面板数据
as - analysis为分析
综上所述为面板数据分析。面板数据为三维数据。但是目前由于pandas的发展,现在三维数据结构panel已经不经常使用了。
2.为什么用pandas
这里我们之前的博客中已经讲解了numpy和matplotlib库,一个用来计算,一个用来数据可视化,那么我们为什么还介绍pandas?原因在于,pandas比numpy显示的数据更全面,展现的是存在行索引和列索引的ndarray。对于matplotlib来讲,pandas可以利用极简的代码来可视化。注意这里pandas的底层也是numpy库和matplotlib库
3.pandas的数据结构
1.series:含有行索引的一维数组
2.dataframe:series的容器,既有行索引,又有列索引
3.panel:dataframe的容器
2.dataframe属性和方法
属性:
1.shape属性
2.index属性
3.columns属性
4.values属性,返回的是一个二维数组ndarray,不带有索引
5.T属性,返回行列转换的二维表(dataframe)
方法:
1.head(),查看头样本,如果不传入数值,那么返回前五行的样本
2.tail(),查看尾样本,如果不传入数值,那么返回后五行的样本
3.dataframe索引设置
1.dataframe.index =
2.dataframe.reset_index(),不常用
3.dataframe.set_index(),不常用
4.series属性和方法
1.index属性
2.values属性
3.head方法
4.tail方法
5.索引操作
1.直接索引
df['行名称']['列名称']
注意这里如果想直接索引的话,要先行后列的顺序进行。
2.名称索引
df.loc['行名称', '列名称']
注意,这里的索引方法就是包含前,也包含后。
3.数值索引
df.iloc[行索引,列索引]
注意,这里的索引方式就是包含前不包含后。
4.复合索引
df.ix[行索引,'列名称']
注意:这个方法目前已经不建议使用了。
6.赋值和排序
1.赋值:索引 ——》赋值
这里需要注意的是,我们只能通过名称索引和数值索引才能进行赋值,直接索引是不能赋值的。总的来讲就是赋值只能通过loc或者iloc进行。
2.排序:
1.按照value索引
sort_values(by=, ascending=)
by:传入列索引或者传入一个由列索引组成的列表,按照顺序进行排序。
ascending:传入bool值,指定从大到小或者从小到大。
2.按照index索引
sort_index()
dataframe属性
代码:
import pandas as pd
import numpy as np
np.random.seed(22)
data = np.random.normal(0, 1, size=(10, 5))
data_df = pd.DataFrame(data, columns=['red', 'yellow', 'purple', 'green', 'black'], index=['样本{}'.format(i) for i in range(1, 11)])
print(data_df.head())
print('shape属性:\n', data_df.shape)
print('columns属性:\n', data_df.columns)
print('index属性:\n', data_df.index)
print('values属性:\n', data_df.values)
输出:
red yellow purple green black 样本1 -0.091950 -1.463351 1.081792 -0.239325 -0.491129 样本2 -1.002272 0.918822 -1.103632 0.626493 -0.561514 样本3 0.028855 -0.230767 0.587752 0.752318 -1.058503 样本4 1.055972 0.747750 1.064677 1.520130 -1.488603 样本5 1.859990 -1.598613 -0.646074 0.337325 1.046729shape属性: (10, 5) columns属性: Index(['red', 'yellow', 'purple', 'green', 'black'], dtype='object') index属性: Index(['样本1', '样本2', '样本3', '样本4', '样本5', '样本6', '样本7', '样本8', '样本9', '样本10'], dtype='object') values属性: [[-0.09194992 -1.46335065 1.08179168 -0.23932517 -0.49112914] [-1.00227201 0.9188215 -1.1036321 0.62649346 -0.56151378] [ 0.02885512 -0.23076719 0.58775221 0.75231758 -1.05850255] [ 1.05597241 0.74775027 1.06467659 1.52012959 -1.48860294] [ 1.85998989 -1.59861303 -0.64607361 0.337325 1.04672873] [ 0.62914334 0.36305909 0.5557497 -1.08854953 0.02369477] [ 2.49917664 -2.49003039 -0.23486239 -0.09756346 -0.88652934] [-0.13671324 0.10197893 -0.25092954 -0.0788123 -1.08516417] [ 0.59492845 -0.63890807 -1.10783686 2.10614576 -0.56738777] [-0.47994979 -1.92322986 0.39958854 -1.04818387 -0.6938787 ]]
dataframe方法
代码:
import pandas as pd
import numpy as np
np.random.seed(22)
data = np.random.normal(0, 1, size=(10, 5))
data_df = pd.DataFrame(data, columns=['red', 'yellow', 'purple', 'green', 'black'], index=['样本{}'.format(i) for i in range(1, 11)])
# head()方法
# data_df.head(3)
# tail()方法
data_df.tail()
输出:
red yellow purple green black 样本6 0.629143 0.363059 0.555750 -1.088550 0.023695 样本7 2.499177 -2.490030 -0.234862 -0.097563 -0.886529 样本8 -0.136713 0.101979 -0.250930 -0.078812 -1.085164 样本9 0.594928 -0.638908 -1.107837 2.106146 -0.567388 样本10 -0.479950 -1.923230 0.399589 -1.048184 -0.693879
dataframe索引设置
代码:
import pandas as pd
import numpy as np
np.random.seed(22)
data = np.random.normal(0, 1, size=(10, 5))
data_df = pd.DataFrame(data, columns=['red', 'yellow', 'purple', 'green', 'black'], index=['样本{}'.format(i) for i in range(1, 11)])
# 方式一:利用dataframe的index属性和columns属性,最常用的方法
data_df.index = ['样本{}__'.format(i) for i in range(1, 11)]
print(data_df)
# 方式二:重新设置索引reset_index(),这种方法不常用。
# 方式三:设置索引set_index(),这种方法也不常用。
# 不常用的方法,就不讲解了。
输出:
red yellow purple green black 样本1__ -0.091950 -1.463351 1.081792 -0.239325 -0.491129 样本2__ -1.002272 0.918822 -1.103632 0.626493 -0.561514 样本3__ 0.028855 -0.230767 0.587752 0.752318 -1.058503 样本4__ 1.055972 0.747750 1.064677 1.520130 -1.488603 样本5__ 1.859990 -1.598613 -0.646074 0.337325 1.046729 样本6__ 0.629143 0.363059 0.555750 -1.088550 0.023695 样本7__ 2.499177 -2.490030 -0.234862 -0.097563 -0.886529 样本8__ -0.136713 0.101979 -0.250930 -0.078812 -1.085164 样本9__ 0.594928 -0.638908 -1.107837 2.106146 -0.567388 样本10__ -0.479950 -1.923230 0.399589 -1.048184 -0.693879
Series的属性和方法
代码:
import pandas as pd
import numpy as np
np.random.seed(22)
data = np.random.normal(0, 1, size=(10, 5))
data_df = pd.DataFrame(data, columns=['red', 'yellow', 'purple', 'green', 'black'], index=['样本{}'.format(i) for i in range(1, 11)])
sr = data_df.iloc[0, :]
print(sr)
print(sr.index)
print(sr.values)
print(sr.head())
print(sr.tail())
输出:
red -0.091950 yellow -1.463351 purple 1.081792 green -0.239325 black -0.491129 Name: 样本1, dtype: float64 Index(['red', 'yellow', 'purple', 'green', 'black'], dtype='object') [-0.09194992 -1.46335065 1.08179168 -0.23932517 -0.49112914] red -0.091950 yellow -1.463351 purple 1.081792 green -0.239325 black -0.491129 Name: 样本1, dtype: float64 red -0.091950 yellow -1.463351 purple 1.081792 green -0.239325 black -0.491129 Name: 样本1, dtype: float64
索引操作
代码:
import pandas as pd
import numpy as np
np.random.seed(22)
data = np.random.normal(0, 1, size=(10, 4))
data_df = pd.DataFrame(data, index=['样本{}'.format(i) for i in range(1, 11)], columns=['red', 'yellow', 'purple', 'green'])
# 1.直接索引
print(data_df['red'][0])
# 2.名称索引
print(data_df.loc['样本1': '样本5', 'red':'green'])
# 3.数值索引
print(data_df.iloc[0: 5, 0: 3])
# 4.混合索引
# print(data_df.ix[0: 5, 'red':'green'])
# 在我使用的pandas的版本中ix方法已经不能使用了
输出:
-0.0919499198651913 red yellow purple green 样本1 -0.091950 -1.463351 1.081792 -0.239325 样本2 -0.491129 -1.002272 0.918822 -1.103632 样本3 0.626493 -0.561514 0.028855 -0.230767 样本4 0.587752 0.752318 -1.058503 1.055972 样本5 0.747750 1.064677 1.520130 -1.488603 red yellow purple 样本1 -0.091950 -1.463351 1.081792 样本2 -0.491129 -1.002272 0.918822 样本3 0.626493 -0.561514 0.028855 样本4 0.587752 0.752318 -1.058503 样本5 0.747750 1.064677 1.520130
赋值与排序
代码:
import pandas as pd
import numpy as np
np.random.seed(22)
data = np.random.normal(0, 1, size=(10, 4))
df = pd.DataFrame(data, columns=['red', 'yellow', 'balck', 'green'])
# 赋值操作
df.loc['4', :] = 100
# 元素排序排序操作
df1 = df.sort_values(by=['red', 'yellow'], ascending=[False, True]) # red从大到小排序, yellow从大到小
print(df1)
# 索引排序操作
# df2 = df.sort_index() # 索引从小大到大排序
# help(df1.sort_index)
df = pd.DataFrame([1, 2, 3, 4, 5], index=[100, 29, 234, 1, 150], columns=['A'])
print(df.sort_index())
输出:
red yellow balck green 4 100.000000 100.000000 100.000000 100.000000 5 1.859990 -1.598613 -0.646074 0.337325 6 1.046729 0.629143 0.363059 0.555750 4 0.747750 1.064677 1.520130 -1.488603 2 0.626493 -0.561514 0.028855 -0.230767 3 0.587752 0.752318 -1.058503 1.055972 9 0.101979 -0.250930 -0.078812 -1.085164 0 -0.091950 -1.463351 1.081792 -0.239325 8 -0.234862 -0.097563 -0.886529 -0.136713 1 -0.491129 -1.002272 0.918822 -1.103632 7 -1.088550 0.023695 2.499177 -2.490030 A 1 4 29 2 100 1 150 5 234 3
学习地址: