数据分析入土(三)

part 21 - part 30 笔记-入门课完结

part 21 减少内存技巧

import pandas as pd
drinks = pd.read_csv(‘文件路径’)

查看文件相关信息,数据类型,
各列的数据类型,是否有缺失,内存使用情况

drinks.info(memory_usage=‘deep’)

查看各列内存使用

drinks.memory_usage(deep=True)

计算使用总内存

drinks.memory_usage(deep=True).sum

将指定列数据类型设置为category,
减少内存使用,计算成本
将一列中会重复使用的内容定义为category,
意味着计算机给每一个内容打上一个标记,比如0,1,2等,
在计算机看来原本的一个个字符串变成了简单的0,1,2等,
但是还是显示各列原本的内容
在实际的操作中是使用对应的标记,然后再显示内容,
并且可以通过标记进行索引

drinks[‘country’] = drinks.country.astype(‘category’)

显示该列的所有category

drinks.country.cat.categories

对列category化,手动设置,
并且可以通过category进行排序,顺序按设置时的顺序从小至大

df[‘quality’] = df.quality.set_categories([
‘good’,
‘very good’,
‘excellent’],
ordered=True)

df[“quality”] = pd.Categorical(
df.quality.set_categories =
[‘good’,
‘very good’,
‘excellent’],
ordered=True)

将该列按category排序

df.sort_values(‘quality’)

筛选该列中>good的行

df.loc[df.quality > ‘good’, :]

part 22 如何使用pandas和scikit-learn创建Kaggle submissions

import pandas as pd

读取训练样本

train = pd.read_csv(‘http://bit.ly/kaggle’)

创建特征列,从训练样本中选取特定两列

feature_cols = [‘Pclass’, ‘Parch’]

需要拟合的数据

X = train.loc[:, feature_cols]

拟合的结果

y = train.Survived

加载sklearn

from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
logreg.fit(X, y)

读取测试样本

test = pd.read_csv(‘http://bit.ly/kaggletest’)

设置新的特征列,需要对其进行拟合

X_new = test.loc[:, feature_cols]

对X_new进行逻辑回归,得到预测结果

new_pred_class = logreg.predict(X_new)

创建DataFrame存储结果,同时设置索引

pd.DataFrame({‘PassengerId’:test.PassengerId, ‘Survied’:new_pred_class}).set_index(‘PassengerId’).to_csv(‘sub.csv’)

part 23 随机取样

import pandas as pd
ufo = pd.read_csv(‘文件路径’)

这两种效果一样,均为判断ufo文件中是否由缺失值,
输出为True或者False

ufo.isnull() 与 pd.isnull(ufo))

loc iloc
loc主要用于匹配,iloc侧重偏移量,不包含右边范围

ufo.loc[0:4, :] 与 ufo.iloc[0:4, :]

随机取样
随机取三行,每次运行结果不同

ufo.sample(n=3)

随机取三行,固定结果

ufo.sample(n=3, random_state=42)

随机取75%的行,并固定结果

ufo.sample(frac=0.75, random_state=99)

将随机取的75%样本作为训练样本

train = ufo.sample(frac=0.75, random_state=99)

将剩余的样本作为测试样本

test = ufo.loc[~ufo.index.isin(train.index), :]

part 24 如何创建dummy variables

import pandas as pd
train = pd.read_csv(‘http://bit.ly/kaggletrain’)

创建列Sex_male,当列Sex中为female时,为0,male时,为1

train[‘Sex_male’] = train.Sex.map({‘female’:0, ‘male’:1})

对列中的每一个变量创建单独的列,并以0或1指示

pd.get_dummies(train.Sex)

对于一列中只有两个变量的情况只需保留一列dummy

pd.get_dummies(train.Sex).iloc[:,1:]

创建dummy时列生成带有原列标题内容的标题,以指示数据来源

pd.get_dummies(train.Sex, prefix=‘Sex’).iloc[:, 1:]

将创建的dummy列与原表格合并

Sex_dummies = pd.get_dummies(train.Sex, prefix=‘Sex’).iloc[:, 1:]
train = pd.concat([train, Sex_dummies], axis=1)

同时对表格中多个列创建dummy代替原来的列,
并剪切掉每种dummy的第一列

pd.get_dummies(train, columns=[‘Sex’, ‘Embarked’], drop_first=True)

part 25 日期和时间

import pandas as pd
ufo = pd.read_csv(‘http://bit.ly/uforeports’)

将ufo中的Time列的数据类型转datetime64格式

ufo[‘Time’] = pd.to_datetime(ufo.Time)

只显示ufo表格中Time列的小时数

ufo.Time.dt.hour

星期几

ufo.Time.dt.weekday_name

一周的第几天

ufo.Time.dt.weekday

一年中的第几天

ufo.Time.dt.dayofyear

年份

uof.Time.dt.year

创建一个日期

ts = pd.to_datetime(‘1/1/1999’)

通过创建的日期进行数据筛选,选出在这日期之后的行

ufo.loc[ufo.Time >= ts, :]

查看表格中这一列的最新日期

ufo.Time.max()

查看表格中这一列的最早日期

ufo.Time.min()

最早日期与最新日期间隔天数

(ufo.Time.max() - ufo.Time.min()).days

将year单独作为一列

ufo[‘year’] = ufo.Time.dt.year

year这列中各个年份出现次数,并根据索引排序

ufo.Year.value_counts().sort_index()

根据年份绘制曲线图,注意前面要加载matplotlib

ufo.Year.value_counts.sort_index().plot()

part 26 寻找并删除重复行

import pandas as pd
user_cols = [‘user_id’, ‘age’, ‘gender’, ‘occupation’, ‘zip_code’]
users = pd.read_table(‘http://bit.ly/movieusers’, sep=’|’, header=None, names=user_cols, index_col=‘user_id’)

输出指定列对于行是否重复的布尔值
False – 无重复, True – 与前面某一行重复

user.zip_code.duplicated()

指定列中重复行数量

user.zip_code.duplicated().sum()

整个表格重复行数量

user.duplicated().sum()

显示表格中重复行的首次出现的行

users.loc[users.duplicated(keep=‘first’), :]

显示表格中重复行的最后出现的行

users.loc[users.duplicated(keep=‘last’), :]

显示所有重复行,按表格index顺序显示,被重复与重复行

users.loc[users.duplicated(keep=‘False’), :]

删除表格中重复行的首次出现的行

users.drop_duplicates(keep=‘first’).shape

删除表格中重复行的最后出现的行

users.drop_duplicates(keep=‘last’).shape

删除所有重复行,被重复的行也一同删除

users.drop_duplicates(keep=‘False’).shape

只考虑age,zip_code两列,重复的行数量

users.duplicated(subset=[‘age’, ‘zip_code’]).sum()

删除

users.drop.duplicates(subset=[‘age’, ‘zip_code’]).shape()

part 27 如何避免SettingWithCopyWarning

出现SettingWithCopyWarning
需要查看数据是否变化,有时命令已经起作用了,有时没有

import pandas as pd
movies = pd.read_csv(‘http’)

将表中的NOT RATED 替换为 nan,但是会报错,SettingWithCopyWarning

movies[movies.content_rating==‘NOT RATED’].content_rating = np.nan

正确形式为,替换时需要使用loc

movies.loc[movies.content_rating==‘NOT RATED’, ‘content_rating’] = np.nan

查看列content_rating中缺失数量

movies.content_rating.isnull().sum()

筛选某列中符合条件的行,
加入copy指令防止出错,直接告诉pandas此数据为copy

top_movies = movies.loc[movies.star_rating >=9, :].copy()

part 28 如何改变显示选项

import pandas as pd
drinks = pd.read_csv(‘路径’)

显示默认显示的最大行数 60

pd.get_option(‘display.max_rows’)

显示默认显示的最大列数 20

pd.get_option(‘display.max_columns’)

显示所有行

pd.get_option(‘display.max_rows’, None)

回到默认显示的行数

pd.reset_option(‘display.max_rows’)

train = pd.read_csv(‘http://bit.ly/kaggletrain’)

默认列宽,即显示的最大的字符数 50

pd.get_option(‘display.max_colwidth’)

设置最大列宽为1000字符,以便显示省略的内容

pd.get_option(‘display.max_colwidth’, 1000)

默认显示数字的小数点后6位

pd.get_option(‘display.precision’)

设置为显示小数点后2位

pd.get_option(‘display.precision’, 2)

将表格中的浮点数据类型的数字如12345表示为1,234,5

pd.set_option(‘display.float_format’, ‘{:,}’, format)

显示所有关于显示的选项

pd.describe_option()

可以直接在括号里输入内容搜索相关函数
搜索关于row的函数

pd.describe_option(‘row’)

重置所有关于显示的操作

pd.reset_option(‘all’)

part 29 从另一项目中创建DataFrame

创建一个表格

pd.DataFrame({‘id’:[100, 101, 102], ‘color’:[‘red’, ‘blue’, ‘red’]}, columns=[‘id’, ‘color’], index=[‘a’, ‘b’, ‘c’])

创建表格,指定列

pd.DataFrame([[100, ‘red’], [101, ‘blue’], [102, ‘red’]], columns=[‘id’, ‘color’])

import numpy as np

创建一个numpy数组

arr = np.random.rand(4, 2)

将创建的数组形成表格形式,并定义列标题

pd.DataFrame(arr, columns=[‘one’, ‘two’])

生成表格,其中内容用numpy来设置,将student作为索引

pd.DataFrame({‘student’:np.arange(100, 110, 1), ‘test’:np.random.randint(60, 101, 10)}).set_index(‘student’)

创建一个Series

s = pd.Series([‘red’, ‘square’, index=[‘c’, ‘b’], name=‘shape’)

将创建的Series加入到其他表格中,作为行插入,缺失值为NaN

pd.concat([df, s], axis=1)

part 30 如何使用pandas Series or DataFrame

import pandas as pd
train = pd.read_csv(‘http://bit.ly/kaggletrain’)
train.head()

将Sex这列中的female标记为0,male标记为1,并创建一个新的列存储这些标记

train[‘Sex_male’] = train.Sex.map({‘female’:0, ‘male’:1})

查看Sex和Sex_num这两列

train.loc[0:4, [‘Sex’, ‘Sex_num’]]

新建一列,内容是Name这列的字符长度

train[‘Name_length’] = train.Name.apply(len)

显示Name和Name_length两列

train.loc[0:4, [‘Name’, ‘Name_length’]]

import numpy as np

新建一列,内容是Fare这列数据的取整

train[‘Fare_ceil’] = tain.Fare.apply(np.ceil)

显示这两列

train.loc[0:4, [‘Fare’, ‘Fare_ceil’]]

将字符串用逗号分开

train.Name.str.split(’,’).head

def get_element(my_list, position):
reture my_list[position]

提取出Name这列经过逗号分离后的每一行的第一个元素

train.Name.str.split(’,’).apply(get_element, position=0).head()

或者

train.Name.str.split(’,’).apply(lambda x: x[0]).head

drinks = pd.read_csv(‘http://bit.ly/drinksbycountry’)

显示表中这几列中各自列里面最大的数

drinks.loc[:, ‘beer_servings’:‘wine_servings’].apply(max, axis=0)

显示表中这几列的每一行里面最大的数

drinks.loc[:, ‘beer_servings’:‘wine_servings’].apply(max, axis=1)

显示表中这几列的每一行里面最大的数对应的列标题

drinks.loc[:, ‘beer_servings’:‘wine_servings’].apply(np.argmax, axis=1)

将这几列所有的数值类型都转化为float类型

drinks.loc[:, ‘beer_servings’:‘wine_servings’].applymap(float)

导入对表格部分内容的操作,显示表格

drinks.loc[:, ‘beer_servings’:‘wine_servings’] = drinks.loc[:, ‘beer_servings’:‘wine_servings’].applymap(float)
drinks.head()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值