數據清理,預處理 pandas dataframe 操做技巧 總結

dsoft2 = data1.loc[(data1['程'] == "輕") | (data1['程'] == "中")]
設置x下標
plt.xticks(np.arange(24))html

特定列 排序
print(data.sort_values(axis = 0,ascending = True,by = '停留時間'))sql

plt.savefig(name+".jpg")


#中文
myfont = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf', size=14)
import seaborn as sns
sns.set(font=myfont.get_name())

file = open(".xlsx", "rb")
data = pd.read_excel(file, sep="\t")
data = data.loc[(data['時間'] > 0) & (data['時間'] < 4320)]
drop_feat = ["編號",..., "狀態"]
feat = [i for i in data.columns if i not in drop_feat]
data = data[feat]
print(data.isnull().sum() / len(data)) #看缺失比例,字段

# 讀取文檔以及,過濾填充數據, 篩選數據
# ddie = data.loc[(data['等級'] == "Ⅲ") | (data['等級'] == "Ⅳ")]
data = ddie.groupby(['時段', '分類']).mean().reset_index()
dataForsize = ddie.groupby(['時段', '分類']).size().reset_index()

dmean1 = data.loc[(data['類'] == '') | (data[''] == '')]
dsize1 = dataForsize.loc[(dataForsize['類'] == '統') | (dataForsize[''] == '')]
dmean1 = dmean1.groupby(['掛']).mean() # 分組後 平均
dsize1 = dsize1.groupby(['掛'])[0].agg(sum) # 計 分組後 求和

# xx = list(range(0, 24)) 技巧得 x軸 連續座標
y1 = dmean1["時間"]
x1 = y1._index._data  技巧 對應的 索引 不連續座標 , 方法論:debug查 屬性

plt.figure(figsize=(16,5))
plt.plot(x1, y1,color='blue')
plt.plot(x3, y3,color='red')
for i, (_x, _y) in enumerate(zip(x1, y1)):
plt.text(_x, _y, dsize1[x1[i]], color='blue', fontsize=12) # 關鍵 dsize1[x1[i]] 是從連續的i找不連續的x[i]的座標來獲得不連續的y值
plt.xticks(np.arange(24))
label = [ "其它"]
plt.legend(label, loc=0, ncol=2)
plt.xlabel(" 0-23小時")
plt.ylabel("時長")
plt.show()


------------------

 

==========數據集 讀取 處理 合併
==========查看信息 統計>>分佈
==========數據應用/建模 重要工做 看異常點,缺省值 處理字段(特徵),處理髒數據 方法:查看>>獲取>>處理
==========轉類型,轉數字 astype,Encoder,map,one-hot,pivot
==========生成相關圖,分析特徵圖 查看數據均衡分佈程度及處理:生成模擬數據:上採樣,下采樣 ;box-cox變換 計距離,皮爾遜數據庫


==========數據集 讀取 處理 合併
data = pd.read file
data = pd.concat([a, b],ignore_index=True) Concatenate英[kɒn'kætɪneɪt DataFrame objects
data = copy.deepcopy(data[[ 'c1', 'c2']]) # data[[]] 雙括號區別:多列切片
data1 = pd.concat([data1,data[""]])
data = pd.merge(data,data1,on="") 數組

df2['col4'] = ['cnn','rnn'] # 列擴充
df2.append(pd.DataFrame({' # 行擴充
dfb.join(df_a,how='outer') # 合併DataFrame,並集app

default,concat是在axis=0工做,最終產生一個‘更多列’的series,若傳入axis=1結果就變成一個dataframe.函數


==========查看信息 統計>>分佈
print(data.isnull().sum()/len(data))
print(data._info_axis) print(data.axes) axis英[ˈæksɪs]美[ˈæksɪs] 軸,軸線 axes也是軸
print(data.shape)
print(data.dtypes type(obj)) astype
print(data.head(5))
print(data.info)
print(data[''].describe())編碼


print(dataframe.index,dataframe.columns)
圖看值分佈
data.boxplot(column=[''],return_type='axes')
查多少種取值(看分佈)
data[].value_counts() len(data[''].unique())
print(len(data['c'].value_counts())) #len(data['c'].value_counts()) 有了count爲何還要lenspa

排序看範圍
b = pd.DataFrame(a).sort_values('').reset_index(drop=True).net

 

==========數據應用/建模 重要工做 看異常點,缺省值 處理字段(特徵),處理髒數據 方法:查看>>獲取>>處理
data.apply(lambda x: sum(x.isnull()))
apply applymapdebug

data[]和loc的區別:百度:pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix)
# 根據索引查看數據 dataframe.loc['a'] # 索引爲a這一行的數據
data[]是 切片 一列的行作
data[[]]是 多列切片

for column in data.columns: # 重置爲null , o ,
data[column] =
data[column].apply(lambda x: np.nan if x ==" "else x)
lambda x: 1 if pd.isnull(x) else 0
data[""].apply( lambda x: 0 if str(x)=="#VALUE!" else x)
data[''].apply( lambda x: 1 if pd.isnull(x) else 0)


#缺省值很少,用均值代替 keypoint
data.fillna(0,inplace=True)
data[''].fillna(0, inplace=True)
#找中位數去填補缺省值(由於缺省的很少)
data[''].fillna(data[''].median(),inplace=True)


data.dropna(inplace=True) //一般狀況下刪除行,使用參數axis = 0,刪除列的參數axis = 1,一般不會這麼作,那樣會刪除一個變量。 記憶 0,1,行列
data.drop(drop_feat,axis=1,inplace=True)
len(data['col'].unique())
data.drop('col',axis=1,inplace=True)

 

==========轉類型,轉數字 astype,Encoder,map,one-hot,pivot

for column in le_columns :
if column not in drop_feat:
data[[column]]=data[[column]].astype("int64")
data[[column]]=data[[column]].astype("str")

Encoder
sub_data["measures"],measures_dict = label_encode(sub_data,"measures")

def label_encode(data,column_name):
  data[column_name] = data[column_name].astype(str)
  data[column_name].fillna("空",inplace=True)
  dummy_encode = pd.get_dummies(data[column_name])
  column_num = range(len(dummy_encode.columns))
  column_dict = {}
  for i in column_num:
  column_dict[dummy_encode.columns[i]] = i
  #data[column_name] = data[column_name].apply(lambda x:column_name+"_"+x)
  data[column_name] = data[column_name].map(column_dict)
  return data[column_name],column_dict


數值編碼
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
var_to_encode = ['Device_Type','Source']
for col in var_to_encode:
data[col] = le.fit_transform(data[col])


weekday_map = {"星期一":1,"星期二":2,"星期三":3,"星期四":4,"星期五":5,"星期六":6,"星期日":7}
season_map = {"春":1,"夏":2,"秋":3,"冬":4}
gender_map = {"男":1,"女":2}
sub_data["sex"]=sub_data["sex"].map(gender_map)
data[''] = data[''].map(lambda x: split_word(x,stopwords))


pandas使用
get_dummies 進行one-hot編碼
pivot 行列轉
data1 = data.pivot(index="", values="1", columns="").reset_index()


==========生成相關圖,分析特徵圖 查看數據均衡分佈程度及處理:生成模擬數據:上採樣,下采樣 ;box-cox變換 計距離,皮爾遜
data1 = data[["a","b"]]
corrmat = data1.corr()
plt.subplots(figsize=(12,9))
sns.heatmap(corrmat,vmax=0.2,square=True)

 

其它技巧
生成日期範圍
pd.date_range('4/1/2012','6/1/2012')

numpy
數組轉置和軸對換 區別是什麼:簡單的轉置就是軸對換,那複雜的呢
reshape dot T transpose
有集合運算
有線代的操做函數

處理,過濾 填充 缺失數據
dropna fillan isnull notnull

逐塊讀取大文件,
chunker = pd.read_csv('filepath',chunkssize=100)
for a in chunker:
讀幾行
re = pd.read_csv('filepath',nrows=5,skiprows,na_values='',converters='映射成字典')

重塑reshape 軸向旋轉pivot
stack 將數據的列轉爲行
unstack 將數據的行轉爲列
duplicated() 重複行
重命名軸索引 rename

 

 

_data["line"] = _data.apply(lambda data_row: change_str(data_row))
_detail_data["費用"] = _detail_data['門診號'].apply(lambda x: change_patient_str(x))
前者是整行爲參數,後者爲單列

http://pandas.pydata.org/pandas-docs/stable/merging.html

pd.concat  鏈接,以索引與列引爲主,比較‘直接拼接’    多用於,豎向多行合併   verify_integrity=True    左右拼接axis=1     ignore_index=True 【Clear the existing index and reset it】

pd.merge  和join  像sql 的join 左右鏈接多,以某個key爲對應鍵  多用於,橫向多列合併

 

https://blog.csdn.net/zutsoft/article/details/51498026merge  經過鍵拼接列

concat  能夠沿着一條軸將多個對象堆疊到一塊兒

concat方法至關於數據庫中的全鏈接(UNION ALL),能夠指定按某個軸進行鏈接,也能夠指定鏈接的方式join(outer,inner 只有這兩種)。
與數據庫不一樣的時concat不會去重,要達到去重的效果能夠使用drop_duplicates方法
相關文章
相關標籤/搜索