pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包
类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的 。Series 和 DataFrame 分别对应于一维的序列和二维的表结构。pandas 约定俗成的导入方法如下:
import pandas as pd
博客中使用的数据文件在百度网盘
读取csv文件,打印变量类型和数据类型
food_info = pd.read_csv("food_info.csv") # 读入csv数据文件
print(type(food_info)) # 打印变量类型
<class 'pandas.core.frame.DataFrame'>
print food_info.dtypes # 打印数据类型
读取数据前几行数据,获取数据列名,数据形状
print food_info.head() #打印数据的前几行数据
print food_info.head(3) #打印数据的前三行数据
print food_info.columns #打印出数据的列名
Index([u'NDB_No', u'Shrt_Desc', u'Water_(g)', u'Energ_Kcal', u'Protein_(g)',
u'Lipid_Tot_(g)', u'Ash_(g)', u'Carbohydrt_(g)', u'Fiber_TD_(g)',
u'Sugar_Tot_(g)', u'Calcium_(mg)', u'Iron_(mg)', u'Magnesium_(mg)',
u'Phosphorus_(mg)', u'Potassium_(mg)', u'Sodium_(mg)', u'Zinc_(mg)',
u'Copper_(mg)', u'Manganese_(mg)', u'Selenium_(mcg)', u'Vit_C_(mg)',
u'Thiamin_(mg)', u'Riboflavin_(mg)', u'Niacin_(mg)', u'Vit_B6_(mg)',
u'Vit_B12_(mcg)', u'Vit_A_IU', u'Vit_A_RAE', u'Vit_E_(mg)',
u'Vit_D_mcg', u'Vit_D_IU', u'Vit_K_(mcg)', u'FA_Sat_(g)',
u'FA_Mono_(g)', u'FA_Poly_(g)', u'Cholestrl_(mg)'],
dtype='object')
print food_info.shape #打印出数据的形状
(8618, 36)
获取数据指定列数据 loc
food_info.loc[3] #读取第三行数据
food_info.loc[3:6] # 读取第三四五行数据
food_info.loc[[2,5,10]] # 读取第二五十行数据
food_info.loc[83,"Age"] # 读取第83行中列"Age"的元素值
通过列名获取数据
food_info["NDB_No"] # 读取数据列名为"NDB_No"的数据
food_info[["Zinc_(mg)", "Copper_(mg)"]] # 读取数据列名为"Zinc_(mg)"和"Copper_(mg)"的数据
数据加减乘除操作
div_1000 = food_info["Iron_(mg)"] / 1000 #对该列每一个数据进行除法操作
add_100 = food_info["Iron_(mg)"] + 100
sub_100 = food_info["Iron_(mg)"] - 100
mult_2 = food_info["Iron_(mg)"] * 2
# 两列数据对应元素做乘法
water_energy = food_info["Water_(g)"] * food_info["Energ_Kcal"]
求取指定列最大值,按照指定列对数据进行排序
max_calories = food_info["Energ_Kcal"].max() #求取该列最大值
# 按照"Sodium_(mg)"列对数据进行排序,inplace=True表示在原数据列进行排序,
# 不生成新的数据列,默认升序排序
food_info.sort_values("Sodium_(mg)", inplace=True)
# 降序排序
food_info.sort_values("Sodium_(mg)", inplace=True, ascending=False)
pd.isnull() 判断某一列数据中的值是否为缺失值
dropna 丢弃掉有缺失值的列或者行,看具体参数
import pandas as pd
import numpy as np
titanic_survival = pd.read_csv("titanic_train.csv")
titanic_survival.head()
age = titanic_survival["Age"]
# pd.isnull 判断每个元素是否为空(称为缺失值或者NaN),
# 如果是就返回True,如果不是就返回False
age_is_null = pd.isnull(age)
# 求取缺失值的个数
age_null_count = len(age_null_true)
# dropna(axis=1) 丢弃掉有NaN的数据列
titanic_survival.dropna(axis=1)
求取列的平均值(mean),总和(sum)和长度(len)
# 求取除了缺失值之外的数据的平均值
good_ages = titanic_survival["Age"][age_is_null == False]
correct_mean_age = sum(good_ages) / len(good_ages)
print correct_mean_age
# pandas提供了mean()函数可以自动忽略掉缺失值
correct_mean_age = titanic_survival["Age"].mean()
pivot_table:按照不同函数进行group操作
# 计算"Pclass"列中不同元素对应的"Age"值的平均值
titanic_survival.pivot_table(index="Pclass", values="Age", aggfunc=np.mean)
print titanic_survival
Pclass Age
1 38.233441
2 29.877630
3 25.140620
# 默认函数是求平均值
titanic_survival.pivot_table(index="Pclass", values="Age", aggfunc=np.mean)
reset_index 排序后重新设置序号
new_titanic_survival = titanic_survival.sort_values("Age",ascending=False)
itanic_reindexed = new_titanic_survival.reset_index(drop=True)
Series: collection of values
DataFrame: collection of Series objects
Panel: collection of DataFrame objects
pandas 读取的数据的每一列称为 series
import pandas as pd
fandango = pd.read_csv('fandango_score_comparison.csv')
series_film = fandango['FILM']
print(series_film[0:5])
0 Avengers: Age of Ultron (2015)
1 Cinderella (2015)
2 Ant-Man (2015)
3 Do You Believe? (2015)
4 Hot Tub Time Machine 2 (2015)
Name: FILM, dtype: object
print type(series_film)
<class 'pandas.core.series.Series'>
数学运算有 np.add(A,B), np.sin(A), np.max()