前言
运用pandas 库对所得到的数据进行数据清洗,复习一下相关的知识。
1 数据清洗
1.1 处理缺失数据
对于数值型数据,分为缺失值(NAN)和非缺失值,对于缺失值的检测,可以通过Python中pandas库的Series类对象的isnull方法进行检测。
import pandas as pd import numpy as np string_data = pd.Series(['Benzema', 'Messi', np.nan, 'Ronaldo']) string_data.isnull()
对于缺失值,除了np.nan来表示,还可以用None来表示缺失值
string_data = None
1.2 滤除掉缺失数据
1.2.1 对于Series
使用dropna方法将NAN的数据过滤掉。
from numpy import nan as NA import pandas as pd data = pd.Series([1,NA,4.5,NA,5]) data.dropna()
另一种方法是使用布尔值索引对NAN数据进行过滤:
data[data.notnull()]
1.2.2 对于DataFrame
dropna()方法对于DataFrame的数据来说,会将含有NAN数据的行全部扔掉。
data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]]) data data.dropna()
如果只想删除掉那些行中全部为NAN数据的DataFrame,通过设置dropna()方法中的参数how即可。
data.dropna(how = 'all')
如果操作对象变为列,代码如下:
data[4] = NA data data.dropna(axis=1, how = 'all')
如果想留下其中的一部分数据,则可以设置thresh参数:
df = pd.DataFrame(np.random.randn(7, 3)) df.iloc[:4, 1] = NA df.iloc[:2, 2] = NA df df.dropna(thresh = 2)
thresh = n,参数n相当于保留至少含有n个非NA的行
1.3 填充缺失数据
fillna(n),n替换掉NA
df = pd.DataFrame(np.random.randn(7, 3)) df.fillna(0)
如果填充格式是字典,fillna({0:n1,1:n2}),将列0的NA填充为 n1,将列1的NA填充为 n2。
df.fillna({{1 : 0.2,2 : 0.3}})
直接填充df的NA值,直接改变df,不需要命名新的变量。
df.fillna(0, inplace = True)
2 数据转换
2.1 移除重复数据
data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'], 'k2': [1, 1, 2, 3, 3, 4, 4]}) data.duplicated()
返回的是每一行的重复结果,不重复是False,重复是True。
如果要去除重复的行,代码如下:
data.drop_duplicates()
如果操作对象为列,在duplicated方法中指定参数即可。
data['k3'] = range(7) data.duplicated(['k1'])
返回的是 k1 列中重复的元素。
对于drop_duplicates()方法来说,去除掉的是重复数据的后者。比如说序号为0,1的数据重复,方法删除掉index = 1的行。如果想要删除前者,只需要指定参数 last即可:
data.drop_duplicates(['k1'], keep = 'last')
2.2 与映射相结合
map函数的使用方法
list(map(lambda x : 2 * x , range(10)))
2.3 替换
使用的是replace 方法,replace有两个参数,前者是被替换的数,后者是替换的数,参数格式可以是列表,也可以是字典
data = pd.Series([1., -999., 2., -999., -1000., 3.]) data.replace(-999.0, np.nan) #替换单个值 data.replace([-999.0, -1000.0], np.nan) #用一个值替换多个值 data.replace([-999.0, -1000.0],[np.nan, 0]) # 用不同值替换不同值 data.replace({-999.0 : 0, -1000.0 : np.nan}) # 格式为字典
2.4 创建数据的修改版
rename方法可以创建数据的修改版,而不必在原数据上进行修改。
data.rename(index=str.title, columns=str.upper)
还可以使用字典的格式,对index, columns 进行改变。
data.rename(index = {'OHIO': 'INDIANA'}, columns = {'three': 'peekaboo'})
这样的重命名并不对原数据进行修改,如果想要直接改变data, 如上,参数inplace = True即可。
data.rename(index = {'OHIO': 'INDIANA'}, columns = {'three': 'peekaboo'}, inplace = True) data
这样就改变了data。
2.5 计算指标\哑变量
用于机器学习中,对定类数据的转化,用于将df中的object对象转化为One-hot编码,消除了数字间的比较大小问题。
df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'], 'data1': range(6)}) pd.get_dummies(df['key']) # 分解了key 列,分开了三个属性
如果想在分开的属性前面加上前缀的话,设定prefix 参数即可实现该功能,可以将其与原始数据合并在一起。
dummies = pd.get_dummies(df['key'], prefix = 'key') df_with_dummies = df['data1'].join(dummies) df_with_dummies
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]