博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python数据处理(持续更新)
阅读量:6680 次
发布时间:2019-06-25

本文共 4732 字,大约阅读时间需要 15 分钟。

#打开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 pdfrom io import StringIOcsv_data = '''A,B,C,D1,2,3,45,6,,80,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)## 遍历Seriesfor idx, label in enumerate(df['classlabel']): print(idx, label)#1, 利用LabelEncoder类快速编码,但此时对color并不适合,#看起来,好像是有大小的from sklearn.preprocessing import LabelEncoderclass_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 npclass_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 OneHotEncoderpf = 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 pddf = pd.DataFrame([{
'col1':'a', 'col2':'1'}, {
'col1':'b', 'col2':'2'}])print df.dtypesdf['col2'] = df['col2'].astype('int')print '-----------'print df.dtypesdf['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
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/luban/p/9037173.html

你可能感兴趣的文章
Unity中那些事半功倍的好插件
查看>>
最全的Markdown语法
查看>>
npm i 的几种方式区别
查看>>
Eclipse界面简介
查看>>
iOS5中的UUID
查看>>
(转载)XML Tutorial for iOS: How To Read and Write XML Documents with GDataXML
查看>>
指定的网络文件夹目前是以其他用户名和密码进行映射的。要用其他用户名和密码进行连接,首先请断开所有现有的连接到网络共享的映射...
查看>>
poj 3259 Wormholes
查看>>
Apache CXFjar包目录(转)
查看>>
NewCoder_13_E 通知小弟[缩点]
查看>>
Elasticsearch 空值过滤
查看>>
spring、springboot、springcloud的区别
查看>>
ActiveMQ入门实例
查看>>
POJ1797 Heavy Transportation
查看>>
MySQL查看和修改表的存储引擎
查看>>
py学习之道
查看>>
vs2015 + opencv3.4.0 + qt msvc2015_64-5.7.1 视屏显示
查看>>
关于——GCD
查看>>
2017-3-2 智慧吉首调研工作
查看>>
求解,一道嵌入式公司面试题
查看>>