pythoncsv数据处理将类型数据改变为数字_⼩练习:⽤python
处理数据
⽆论,数据分析,数据挖掘,还是算法⼯程师,⼯作中80%的时间都⽤来处理数据,给数据打标签了。⽽⼯作中拿到的数据脏的厉害,必须经过处理才能放⼊模型中。
以下是⼀脏数据表:(表格放在最后供看官下载练习)
这张表格有多少处数据问题?⼤家对数据问题是如何定义的?不妨带着疑问阅读下⽂;
数据处理四性“完全合⼀”。
完整性
完整性:单条数据是否存在空值,统计的字段是否完善。
全⾯性:观察某⼀列的全部数值,⽐如在 Excel 表中,我们选中⼀列,可以看到该列的平均值、最⼤值、最⼩值。
平均值、最⼤值、最⼩值。我们可以通过常识来判全⾯性:
断该列是否有问题,⽐如:数据定义、单位标识、数值本⾝。
合法性:数据的类型、内容、⼤⼩的合法性。⽐如数据中存在⾮ ASCII 字符,性别存在了未知,年龄超过了 150 岁等。
合法性
唯⼀性:数据是否存在重复记录,因为数据通常来⾃不同渠道的汇总,重复的情况是常见的
唯⼀性
数据质量完整性问题:
在介绍数据清洗之前,先学会⽤python导⼊数据:
# encoding=utf-8
1完整性&空⾏
删除:观看数据分布,如果缺失数据不多,就删除数据缺失的记录;(数据少,这种⽅法就不可取;或是缺失数据⾮随机,删除就可能导致数据从正态变为⾮正态)
均值:使⽤当前列的均值;(数据正态分布⽤均值替换NA较好)
中位数:使⽤当前列的中位数;(数据分布由于异常值存在⽽不是正太分布的情况下,使⽤中位数效果⽐较好。
⾼频:使⽤当前列出现频率最⾼的数据。(容易改变数据的分布
不常⽤:0代替缺失值(对极端值,平均值影响较⼤)
相似:⽤k近邻的⽅法,寻相似值来替换缺失值;(缺失值填补的准确性就要看聚类结果的好坏了,⽽聚类变数较⼤)
拟合:如果缺失后数据符合回归趋势,那么就拟合⽅程测定缺失值;(缺失值连续,才可以使⽤回归预测,但预测⽅程出来了,反过去填缺
失值,不是显得⽩痴!
# encoding=utf-8
import pandas as pd
import numpy as np
df = pd.read_csv("C://Users//baihua//Desktop//ceshi.csv",encoding='utf-8') #这⾥要注意,如果⽂件中有中⽂,本地⽂件⼀定要转换成 UTF-8的编码格式
print(df)python怎么读csv数据
df.dropna(how='all',inplace=True) #删除空⾏
print(df)
df['Population'].fillna(df['Population'].mean(), inplace=True)#xx列缺失值⽤平均数替换
print(df)
df['Population'].fillna(df['Population'].median(), inplace=True)#xx列缺失值⽤中位数替换
print(df)
age_maxf = df['Population'].value_counts().index[0]
df['Population'].fillna(age_maxf, inplace=True)#xx列缺失值⽤出现频率最⾼的的数代替
print(df)
我们发现数据中有⼀个空⾏,除了 index 之外,全部的值都是 NaN。Pandas 的 read_csv() 并没有可选参数来忽略空⾏,可以通过dropna来删除空⾏。python内置函数使⽤:变量=操作对象.函数
2. 全⾯性
⽂末有数据集下载
#修改列名
# encoding=utf-8
import pandas as pd
import numpy as np
df = pd.read_excel("C://Users//baihua//Desktop//accountMessage.xlsx",encoding='utf-8') #这⾥要注意,如果⽂件中有中⽂,本地⽂件⼀定要转换成 UTF-8的编码格print(df)
print(df)
weight 列的数值,我们能发现 weight 列的单位不统⼀。有的单位是千克(kgs),有的单位是磅(lbs)。
这⾥我使⽤千克作为统⼀的度量单位,将磅(lbs)转化为千克(kgs):
# encoding=utf-8
import pandas as pd
import numpy as np
df = pd.read_excel("C://Users//baihua//Desktop//accountMessage.xlsx",encoding='utf-8') #这⾥要注意,如果⽂件中有中⽂,本地⽂件⼀定要转换成 UTF-8的编码格print(df)
print(df)
# 获取 weight 数据列中单位为 lbs 的数据
rows_with_lbs = df['Weight'].ains('lbs').fillna(False)
print(df[rows_with_lbs])
# 将 lbs 转换为 kgs, 2.2lbs=1kgs
for i,lbs_row in df[rows_with_lbs].iterrows():
Weight=int(float(lbs_row['Weight'][:-3])/2.2)## 截取从头开始到倒数第三个字符之前,即去掉 lbs。
df.at[i,'Weight'] = '{}kgs'.format(Weight)
print(df)
3合法性
在数据中不难发现,姓名列(Name)包含了两个参数 Firtname 和 Lastname,我们使⽤ Python 的 split ⽅
法,str.split(expand=True),将列表拆成新的列,再将原来的 Name 列删除。
# 切分名字,删除源数据列(切分名字实际⽣成了新列,新列会添加到最后)
df[['first_name','last_name']] = df['name'].str.split(expand=True)
df.drop('name', axis=1, inplace=True)
# 删除⾮ ASCII 字符
df['first_name'].replace({r'[^x00-x7F]+':''}, regex=True, inplace=True)
df['last_name'].replace({r'[^x00-x7F]+':''}, regex=True, inplace=True)
print(df)
4唯⼀性
我们校验⼀下数据中是否存在重复记录。如果存在重复记录,就使⽤ Pandas 提供的 drop_duplicates() 来删除重复数据。
df.drop_duplicates(['first_name','last_name'],inplace=True)
print(df)
最后做⼀个完整的数据处理练习:
# encoding=utf-8
import pandas as pd
import numpy as np
import re
df = pd.read_excel("C://Users//baihua//Desktop//kehou.xlsx",encoding='utf-8') #这⾥要注意,如果⽂件中有中⽂,本地⽂件⼀定要转换成 UTF-8的编码格式df['food']=df['food'].str.lower()
df['ounces'].fillna(df['ounces'].median(),inplace=True)
df['ounces']=df['ounces'].apply(lambda a:abs(a))#将ounces列中的负值取绝对值,lambda是匿名函数
参考⽂献:
python字符串函数
python列表函数⽅法
python元组函数⽅法
python字典函数⽅法
python集合函数⽅法
pandas中DataFrame⽤法
pandas中Series⽤法
python缺失值处理
python修改列名
对照excel学python数据处理
lambda等匿名函数
数据来源:
提取码:v18o
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论