python pandas 基本操作

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()

你可能感兴趣的:(数据结构与算法)