Python数据处理(持续更新)
#打开txt文件
- #打开txt文件
- with open('day02.txt') as f:
- for line in f.readlines():
- aline=line.strip()
- bline=aline.split(",")
- print (bline)
数据合并
- pd.merge(data,df,on=['appid'])
数据聚合
- t_data=list1.groupby(['uid','appid',...]) 按照某列
csv数据合并:
- def hebing():
- csv_list = glob.glob('*.csv')
- print(u'共发现%s个CSV文件'% len(csv_list))
- print(u'正在处理............')
- for i in csv_list:
- fr = open(i,'r').read()
- with open('t_data.csv','a') as f:
- f.write(fr)
- print(u'合并完毕!')
- def quchong(file):
- df = pd.read_csv(file,header=0)
- datalist = df.drop_duplicates()
- datalist.to_csv(file)
- if __name__ == '__main__':
- hebing()
- quchong("t_data.csv")
读取片段:
- df = pd.read_csv("annotations.csv")[0:10]
按照列名读取
- data = pd.read_csv('rfm.csv',usecols=['appid','duration','avg_flow'])
要把第三列数据中的0值删除,今天弄了好几个小时,写了个循环,还是不行,最后发现,只要选择数据中大于0的就可以了
- data = pd.read_csv('rfm.csv',usecols=['appid','duration','avg_flow']) #读取数据中的3列数据
- data=data[data.avg_flow>0]#选择大于0的数据
另一种思路,是把该列中数据为0的值挑出来,然后给赋值成nan,再用下面代码将nan值删除
- data.dropna(how='any') #删除有缺失值的行和列
字符串数据转换成数值
这两天想做个推荐模型,但是有一列数据是字符串形式,不好转换,要把它转成数值型进一步处理。对于字符串这种数据类型,主要有以下三种处理方法:
1,通过LabelEncoder来进行快速的转换;
2,通过mapping方式,将类别映射为数值。不过这种方法适用范围有限;
3,通过get_dummies方法来转换。
- import pandas as pd
- from io import StringIO
- csv_data = '''A,B,C,D
- 1,2,3,4
- 5,6,,8
- 0,11,12,'''
- df = pd.read_csv(StringIO(csv_data))
- print(df)
- #统计为空的数目
- print(df.isnull().sum())
- print(df.values)
- #丢弃空的
- print(df.dropna())
- print('after', df)
- from sklearn.preprocessing import Imputer
- # axis=0 列 axis = 1 行
- imr = Imputer(missing_values='NaN', strategy='mean', axis=0)
- imr.fit(df) # fit 构建得到数据
- imputed_data = imr.transform(df.values) #transform 将数据进行填充
- print(imputed_data)
- df = pd.DataFrame([['green', 'M', 10.1, 'class1'],
- ['red', 'L', 13.5, 'class2'],
- ['blue', 'XL', 15.3, 'class1']])
- df.columns =['color', 'size', 'price', 'classlabel']
- print(df)
- size_mapping = {'XL':3, 'L':2, 'M':1}
- df['size'] = df['size'].map(size_mapping)
- print(df)
- ## 遍历Series
- for idx, label in enumerate(df['classlabel']):
- print(idx, label)
- #1, 利用LabelEncoder类快速编码,但此时对color并不适合,
- #看起来,好像是有大小的
- from sklearn.preprocessing import LabelEncoder
- class_le = LabelEncoder()
- color_le = LabelEncoder()
- df['classlabel'] = class_le.fit_transform(df['classlabel'].values)
- #df['color'] = color_le.fit_transform(df['color'].values)
- print(df)
- #2, 映射字典将类标转换为整数
- import numpy as np
- class_mapping = {label: idx for idx, label in enumerate(np.unique(df['classlabel']))}
- df['classlabel'] = df['classlabel'].map(class_mapping)
- print('2,', df)
- #3,处理1不适用的
- #利用创建一个新的虚拟特征
- from sklearn.preprocessing import OneHotEncoder
- pf = pd.get_dummies(df[['color']])
- df = pd.concat([df, pf], axis=1)
- df.drop(['color'], axis=1, inplace=True)
- print(df)
我主要是用了第一种方法,之后将数据导出,完成。
- #通过LabelEncoder来进行快速的转换
- for idx,label in enumerate(data['uid']):
- print(idx,label)
- user_le = LabelEncoder()
- data['userlabel'] = user_le.fit_transform(data['uid'].values)
- print(data)
- data.to_csv(outputfile)
按照条件筛选数据,可以用来查看异常值.
- columns=df[5]
- print(columns[np.abs(columns) > 30])
- #删除UID列
- df=df.drop('uid',1)
数据标准化处理:
- from sklearn import preprocessing#预处理模块
- std_scale = preprocessing.StandardScaler().fit(df[['appid','duration','userlabel','applabel','avgflow']]) #加入数据
- df_std = std_scale.transform(df[['appid','duration','userlabel','applabel','avgflow']])#转换数据
数组数据存储成csv文件:
- np.savetxt('stdata.csv',df_std,delimiter = ',')
将数据每列进行柱状图表示:
- f.hist()
- plt.show()
虚拟变量(dummy variables)
虚拟变量,也叫哑变量,可用来表示分类变量、非数量因素可能产生的影响。在计量经济学模型,需要经常考虑属性因素的影响。例如,职业、文化程度、季节等属性因素往往很难直接度量它们的大小。只能给出它们的“Yes—D=1”或”No—D=0”,或者它们的程度或等级。为了反映属性因素和提高模型的精度,必须将属性因素“量化”。通过构造0-1型的人工变量来量化属性因素。
pandas
提供了一系列分类变量的控制。我们可以用get_dummies
来将”prestige”一列虚拟化。
get_dummies
为每个指定的列创建了新的带二分类预测变量的DataFrame,在本例中,prestige
有四个级别:1,2,3以及4(1代表最有声望),prestige
作为分类变量更加合适。当调用get_dummies
时,会产生四列的dataframe,每一列表示四个级别中的一个。
在数据处理中,list和dict格式的文件都是不可哈希的,所以将list 格式转换成array
- np.array(data)
读取数据确定的几列:
- df.ix[:,[1,2,3,4]]
astype 转换字段类型:
- import pandas as pd
- df = pd.DataFrame([{'col1':'a', 'col2':''}, {'col1':'b', 'col2':''}])
- print df.dtypes
- df['col2'] = df['col2'].astype('int')
- print '-----------'
- print df.dtypes
- df['col2'] = df['col2'].astype('float64')
- print '-----------'
- print df.dtypes
python-Pandas学习 如何对数据集随机抽样
利用Pandas库中的sample。
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
n是要抽取的行数。(例如n=20000时,抽取其中的2W行)
frac是抽取的比列。(有一些时候,我们并对具体抽取的行数不关系,我们想抽取其中的百分比,这个时候就可以选择使用frac,例如frac=0.8,就是抽取其中80%)
replace:是否为有放回抽样,取replace=True时为有放回抽样。
weights这个是每个样本的权重,具体可以看官方文档说明。
random_state这个在之前的文章已经介绍过了。
axis是选择抽取数据的行还是列。axis=0的时是抽取行,axis=1时是抽取列(也就是说axis=1时,在列中随机抽取n列,在axis=0时,在行中随机抽取n行)
---------------------
作者:kingsam_
来源:CSDN
原文:https://blog.csdn.net/qq_22238533/article/details/71080942
版权声明:本文为博主原创文章,转载请附上博文链接!
Python数据处理(持续更新)的更多相关文章
- Python奇技淫巧 - 持续更新中....
Python奇技淫巧 人生苦短,我用Python: 编程界这绝对不是一句空话,尤其是对于使用过多个语言进行工作的同学们来说,用Python的时间越长,越有一种我早干嘛去了的想法,没事,啥时候用Pyth ...
- 常见排序算法整理(python实现 持续更新)
1 快速排序 快速排序是对冒泡排序的一种改进. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行 ...
- Python练习题--持续更新
1.你是一个高级测试工程师,现在要做性能测试,需要你写一个函数,批量生成一些注册使用的账号. 产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大 ...
- Python习题持续更新
1.你是一个高级测试工程师,现在要做性能测试,需要你写一个函数,批量生成一些注册使用的账号. 产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大 ...
- Python练习题–持续更新
1.你是一个高级测试工程师,现在要做性能测试,需要你写一个函数,批量生成一些注册使用的账号. 产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大 ...
- python开发--python函数-(持续更新)
1. 打印 : print() # 打印,输出 2. 变量 : var = 'hello' # 变量var , 把'hello' 赋值给变量 var 3. if 函数 : # 代码块 4个空格或者一个 ...
- 程序员用于机器学习编程的Python 数据处理库 pandas 进阶教程
数据访问 在入门教程中,我们已经使用过访问数据的方法.这里我们再集中看一下. 注:这里的数据访问方法既适用于Series,也适用于DataFrame. **基础方法:[]和. 这是两种最直观的方法,任 ...
- 程序员用于机器学习编程的Python 数据处理库 pandas 入门教程
入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据( ...
- PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- Python开发【第二十三篇】:持续更新中...
Python开发[第二十三篇]:持续更新中...
随机推荐
- Event Loop事件循环,GET!
JS中比较让人头疼的问题之一要算异步事件了,比如我们经常要等后台返回数据后进行dom操作,又比如我们要设置一个定时器完成特定的要求.在这些同步与异步事件里,异步事件肯定是在同步事件之后的,但是异步事件 ...
- 基于Blazor写一个简单的五子棋游戏
写这个五子棋游戏,其实主要目的是想尝试一下微软新作Blazor.Blazor对于那些搞.NET的程序员,又想做一些前端工作,真的挺友好,不用一句JS就可搞定前端交互,美哉.现在已经有很流行的前端框架, ...
- Flutter 拖拽排序组件 ReorderableListView
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 ReorderableListView是通过长按拖动某一项 ...
- python入门到放弃-基本数据类型之tuple元组
#概述 元组俗称不可变的列表,又称只读列表,是python的基本数据类型之一, 用()小括号表示,里面使用,逗号隔开 元组里面可以放任何的数据类型的数据,查询可以,循环可以,但是就是不能修改 #先来看 ...
- 使用java短信验证
package cn.geekss.util; import java.io.BufferedReader;import java.io.InputStreamReader;import java.i ...
- springmvc与swagger2
首先呢我们导入相关的jar包文件 为了方便copy我copy一份 <!-- 导入java ee jar 包 --> <dependency> ...
- 《ASP.NET Core 3框架揭秘》博文汇总
在过去一段时间内,写了一系列关于ASP.NET Core 3相关的文章,其中绝大部分来源于即将出版的<ASP.NET Core 3框架揭秘>(博文只能算是"初稿",与书 ...
- Java反射之对JavaBean的内省操作
上一篇我们说了Java反射之数组的反射应用 这篇我们来模拟实现那些javabean的框架(BeanUtils)的基本操作. [一] 什么是JavaBean JavaBean 是一种JAVA语言写成的可 ...
- span(行级元素)在不定高的div(块级元素)中垂直居中的方法
设置父级元素: align-items: center; display: flex;
- Git 基础入门
目录 git安装 基本设置 创建版本库 相关概念 将代码提交到分支仓库 版本回退 代码修改 撤销修改 文件删除 github 远程仓库 添加远程仓库 克隆远程仓库 分支操作 忽略特殊文件 git安装 ...