多個(gè)DataFrame操作
合并
objs 是需要拼接的對(duì)象集合,一般為列表或者字典
axis=0 是行拼接,拼接之后行數(shù)增加,列數(shù)也根據(jù)join來定,join=’outer’時(shí),列數(shù)是兩表并集。同理join=’inner’,列數(shù)是兩表交集。
在默認(rèn)情況下,axis=0為縱向拼接,此時(shí)有
concat([df1,df2]) 等價(jià)于 df1.append(df2)
在axis=1 時(shí)為橫向拼接 ,此時(shí)有
concat([df1,df2],axis=1) 等價(jià)于 merge(df1,df2,left_index=True,right_index=True,how='outer')
處理數(shù)據(jù)
填充缺失值
使用一個(gè)全局常量填充缺失值:將缺失值用同一個(gè)常數(shù)(如Unknown或﹣∞)替換。如果缺失值都用Unknown替換,則挖掘程序可能誤認(rèn)為它們形成了一個(gè)有趣的概念,因?yàn)樗鼈兌季哂邢嗤闹怠癠nknown”。因此此方法雖然簡單但不可靠。
data.Cabin.fillna('unknown',inplace=True)
df_all.fillna(0, inplace=True)
使用屬性的均值填充缺失值:例如,假定顧客的平均收入為56000美元,則使用該值替換income中的缺失值。
data.Age.fillna(data.Age.mean(),inplace=True)
新建列并賦值
frame['panduan'] = frame.city.apply(lambda x: 1 if 'ing' in x else 0)
Drop列
df1t.drop(['app'], axis=1, inplace=True)
選擇列
col_imp = ['mobile_city_code','label']
df_train = pd.DataFrame(df_train, columns=col_imp)
改列名
a.rename(columns={'A':'a', 'C':'c'}, inplace = True)
應(yīng)用
用kmeans聚類
import pandas as pd
import matplotlib.pyplot as plt
#讀取文本數(shù)據(jù)到DataFrame中,將數(shù)據(jù)轉(zhuǎn)換為matrix,保存在dataSet中
df = pd.read_table('d:/22.txt')
dataSet = df.as_matrix(columns=None)
# n_clusters=4,參數(shù)設(shè)置需要的分類這里設(shè)置成4類
kmeans = KMeans(n_clusters=4, random_state=0).fit(dataSet)
#center為各類的聚類中心,保存在df_center的DataFrame中給數(shù)據(jù)加上標(biāo)簽
center = kmeans.cluster_centers_
df_center = pd.DataFrame(center, columns=['x', 'y'])
#標(biāo)注每個(gè)點(diǎn)的聚類結(jié)果
labels = kmeans.labels_
#將原始數(shù)據(jù)中的索引設(shè)置成得到的數(shù)據(jù)類別,根據(jù)索引提取各類數(shù)據(jù)并保存
df = pd.DataFrame(dataSet, index=labels, columns=['x', 'y'])
df1 = df[df.index==0]
df2 = df[df.index==1]
df3 = df[df.index==2]
df4 = df[df.index==3]
#繪圖
plt.figure(figsize=(10,8), dpi=80)
axes = plt.subplot()
#s表示點(diǎn)大小,c表示color,marker表示點(diǎn)類型,DataFrame數(shù)據(jù)列引用參考博客其他文章
type1 = axes.scatter(df1.loc[:,['x']], df1.loc[:,['y']], s=50, c='red', marker='d')
type2 = axes.scatter(df2.loc[:,['x']], df2.loc[:,['y']], s=50, c='green', marker='*')
type3 = axes.scatter(df3.loc[:,['x']], df3.loc[:,['y']], s=50, c='brown', marker='p')
type4 = axes.scatter(df4.loc[:,['x']], df4.loc[:,['y']], s=50, c='black')
#顯示聚類中心數(shù)據(jù)點(diǎn)
type_center = axes.scatter(df_center.loc[:,'x'], df_center.loc[:,'y'], s=40, c='blue')
plt.xlabel('x', fontsize=16)
plt.ylabel('y', fontsize=16)
axes.legend((type1, type2, type3, type4, type_center), ('0','1','2','3','center'), loc=1)
plt.show()
轉(zhuǎn)ndarray
https://blog.csdn.net/flyfrommath/article/details/69388675
onehot后轉(zhuǎn)dataframe
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
sns.set()
%matplotlib inline
#Iris Plot
iris = load_iris()
n_samples, m_features = iris.data.shape
#Load Data
X, y = iris.data, iris.target
D_target_dummy = dict(zip(np.arange(iris.target_names.shape[0]), iris.target_names))
DF_data = pd.DataFrame(X,columns=iris.feature_names)
DF_data["target"] = pd.Series(y).map(D_target_dummy)
#sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \
#0 5.1 3.5 1.4 0.2
#1 4.9 3.0 1.4 0.2
#2 4.7 3.2 1.3 0.2
#3 4.6 3.1 1.5 0.2
#4 5.0 3.6 1.4 0.2
#5 5.4 3.9 1.7 0.4
DF_dummies = pd.get_dummies(DF_data["target"])
#setosa versicolor virginica
#0 1 0 0
#1 1 0 0
#2 1 0 0
#3 1 0 0
#4 1 0 0
#5 1 0 0
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
def f1(DF_data):
Enc_ohe, Enc_label = OneHotEncoder(), LabelEncoder()
DF_data["Dummies"] = Enc_label.fit_transform(DF_data["target"])
DF_dummies2 = pd.DataFrame(Enc_ohe.fit_transform(DF_data[["Dummies"]]).todense(), columns = Enc_label.classes_)
return(DF_dummies2)
%timeit pd.get_dummies(DF_data["target"])
#1000 loops, best of 3: 777 μs per loop
%timeit f1(DF_data)
#100 loops, best of 3: 2.91 ms per loop