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':'1'}, {'col1':'b', 'col2':'2'}])

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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM