目录
1.导入所需模块
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.options.display.max_rows = 8
2.应用示例
2.1泰坦尼克号乘客数据
#导入数据
df = pd.read_csv("titanic.csv")
#查看前5列数据
df.head()
#按年龄分列的乘客分布情况
df['Age'].hist()
#生存概率如何取决于性别?
df.groupby('Sex')[['Survived']].aggregate(lambda x: x.sum() / len(x))
#存活的概率如何取决于票的等级?
color_list = list('rgbkymc')
df.groupby('Pclass')['Survived'].aggregate(lambda x: x.sum() / len(x)).plot(kind='bar', color=color_list)
2.2时间序列:欧洲的空气质量测量
data = pd.read_csv('20000101_20161231-NO2.csv', sep=';', skiprows=[1], na_values=['n/d'], index_col=0, parse_dates=True)
data.head()
#这些年来,空气污染是否会减少?
data['1999':].resample('M').mean().plot(ylim=[0,120])
data['1999':].resample('A').mean().plot(ylim=[0,100])
3.数据类型:DataFrame
和 Series
3.1DataFrame
表格数据类型(数据存储的多维对象),由行和列组成,类似于数据库中的表格。可以认为,一个数据框是一组具有一个索引的对象。
df
数据框架属性
除了索引属性外,数据框还有列属性。
df.index
df.columns
列的类型
df.dtypes
关于各列的概况信息,可以通过以下方法获得。info()
df.info()
另外,数据帧有一个属性是value()
df.values
创建数据框的数据可以从外部来源导入:文本文件、Excel、数据库。创建数据框的常用方法还有从字典(dict)列表或数组(array)转换。
data = {'country': ['Belgium', 'France', 'Germany', 'Netherlands', 'United Kingdom'],
'population': [11.3, 64.3, 81.3, 16.9, 64.9],
'area': [30510, 671308, 357050, 41526, 244820],
'capital': ['Brussels', 'Paris', 'Berlin', 'Amsterdam', 'London']}
df_countries = pd.DataFrame(data)
df_countries
3.2一维数据Series(日期栏)
df['Age']
age = df['Age']
Series的属性
: index
和 values
age.index
你可以获得numpy数组的属性用.values
age.values[:10]
就像使用numpy数组一样,可以使用索引来获取值。
age[0]
与numpy数组不同的是,索引可以是非数值的。
df = df.set_index('Name')
df
age = df['Age']
age
age['Miss. Margaret Edith Graham']
与numpy数组一样,许多函数可以应用于数据帧和序列。例如,初级运算。
age * 1000
方法:
age.mean()
使用布尔变量列表进行索引。
age[age > 70]
pandas的具体方法:
df['Fare'].value_counts()
4.数据导入和导出
Pandas支持多种格式。
- CSV, text
- SQL database
- Excel
- HDF5
- json
- html
- pickle
- sas, stata
- (parquet)
- ...
df = pd.read_csv("titanic.csv")
df.head()
5.科研
有用的方法(特别是当数据框包含数百万行时)。head
和 tail
df.head(3)
df.tail()
df.info()
获取数据的信息,可用describe
df.describe()
数据可视化
df.plot(kind='box', ylim=[0,100])
df['Age'].plot(kind='hist', bins=50)
选取最后500行的数据
df[-500:].plot(figsize=(12,6))
6.数据选择和过滤
df = pd.read_csv("titanic.csv")
栏目选择
df['Age']
选择多列
df[['Age', 'Fare']]
数值索引选择行。
df[10:15]
索引可用函数loc
和 iloc
loc: 按值选择
iloc:按位置选择
df = df.set_index('Name')
df.loc['Mr. Owen Harris Braund', 'Fare']
df.iloc[0:2,1:3]
您也可以使用索引方法为以下内容赋值
df.loc['Mr. Owen Harris Braund', 'Survived'] = 100
df
布尔索引(过滤)
私家的需要根据一定的条件来选择行。索引器或布尔掩码必须是一维的,并且与索引对象的长度相同。
df['Fare'] > 50
df[df['Fare'] > 50]
创建一个新的演示数据框
df = pd.DataFrame({'key':['A','B','C','A','B','C','A','B','C'],
'data': [0, 5, 10, 5, 10, 15, 10, 15, 20]})
df
7.数据分析方法
7.1列数之和
df['data'].sum()
在很多情况下,数据有不同的组,在这种情况下,你可以这样做。
for key in ['A', 'B', 'C']:
print(key, df[df['key'] == key]['data'].sum())
但是这样做并不是很方便,尤其是在群体多的时候。
7.2Groupby:分组
"分组 "概念:我们想将函数应用于数据框中被某种标准划分的某些部分。
很像是SQL方法。GROUP BY
而不是如上的手动过滤。
df[df['key'] == "A"].sum()
df[df['key'] == "B"].sum()
...
pandas和groupby方法可以做到以下几点。
df.groupby('key').sum()
df.groupby('key').aggregate(np.sum) # 'sum'
还有很多其他方式。
df.groupby('key')['data'].sum()
7.3sort_values()
pandas中的sort_values()函数原理类似于SQL中的order by,可以将数据集依照某个字段中的数据进行排序,该函数即可根据指定列数据也可根据指定行的数据排序。
用法:
DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
参数说明
参数 说明
by 指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis 若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
ascending 是否按指定列的数组升序排列,默认为True,即升序排列
inplace 是否用排序后的数据集替换原来的数据,默认为False,即不替换
na_position {‘first’,‘last’},设定缺失值的显示位置
Pandas还允许使用merge()、concat()、stack()方法、dropna()、fillna()和其他许多方法другое¶合并数据帧。