一些注意事項
在字符串中為了區分轉義符,可以在前面加個\ 或者在最前面加r;
字符串加好拼接;乘號重復;
索引【-1】代表最后一個;
endwith布爾值檢查結尾;
startwirh檢查開始;檢查的可以是元組,里面多個元素;
find找位置;忽略大小寫使用re.findall;
join拼接;
注意python和matab的很大區別是python索引是從0開始的!!!;
將列表中的值進行置空[]就相當於刪除;
判斷一個值在列表中用in;
判斷多個值在列表中:
set([2,10]) <= set(a);
集合set無序不重復,去除列表重復元素可以轉換成集合再轉換回來;
兩個集合:
a-b差集
a|b並集;
a&b交集;
a^b不同時存在的元素
字典無序,list和tup不能當鍵;
del刪除;
sorted按鍵排序;
dict構建字典;
生成序列的range只能是整數;
要生成帶小數的使用np的arrange(起始值,終止值,步長 );
修改文件編碼方式使用notepad++軟件;
導入文本文件(csv)
file文件路徑;
names列名,默認為文件中的第一行;
se分隔符,默認為空,表示默認導入為一列;
encoding設置文件編碼,導入中文的時候需要設置為utf-8
from pandas import read_table;
read_table(file, names = [列名1,列名2,....], sep = "", encoding,...)
from pandas import read_csv;
read_csv(file, names = [列名1,列名2,....], sep = "", encoding,...)
導入Excel文件
filename文件路徑
sheetname sheet的名字
names 列名,默認第一行作為列名
read_excel(fileName, sheetname,header)
導出csv文件
filePath文件路徑;
sep分隔符,默認逗號;
index是否導出行序號,默認導出;
header是否導出列名,默認導出;
df.to_csv(filePath, sep="", index = TRUE, header = TRUE)
重復值處理
行相同的數據只保留一行
返回新的df
df1 = df.drop_duplicates()
缺失值的處理
產生:
暫時無法獲取
信息被遺漏
處理方式
數據補全;(平均值等等)
刪除對應缺失行;(數據量少慎用)
df.dropna()
不處理;
空格值處理
字符型數據前后有空格
newname = df['name'].str.strip()
df['name'] = newname
字段抽取
根據已知列數據的開始和結束位置,抽出新的列
df['列名'] = df['列名'].astype(str) # 先轉換成字符串形式
df1= df['列名'].str.slice(start,stop)
字段拆分
按照固定的字符,拆分已有字符串;
sep用於分割字符串(空格逗號);
n分割為多少列;
expend是否展開為數據框,默認不展開,返回的是系列Series,展開時返回dataframe
split(sep, n, expend = False)
記錄抽取
比較運算
< > >= <= !=
comments為列名,
返回這列中滿足>10000條件的所在行
df[df.comments > 10000]
范圍運算
df[df.comments.between(1000,10000)]
空值匹配
找出為標題為空的行
df[pandas.isnumm(df.title)]
字符匹配
抽取title所在列包含某個字符的所在行
df[df.title.str.contains('', na = False)] # 控制不需要匹配
邏輯運算
df[(df.comments>=1000)&(df.comments<=100000)] # 與上面的between效果相同
隨機抽樣
start范圍開始值(閉)一般為0
end范圍結束值(開)
num抽樣個數
返回的是行數的索引值系列Series
numpy.random.randint(start,end,num)
記錄合並
將兩個結構相同的數據框,合並成一個數據框
import pandas;
df3 = pandas.concat([dataFrame1,dataFrame2])
字段合並
是字段拆分的逆過程,將一個數據框中多列(數字要先轉換成字符型)進行合並
返回一個系列
新列名 = df['列名1'] + df['列名2'] + df['列名3']
字段匹配
將不同結構的數據框,按照一定條件進行合並
x第一個數據框
y第二個數據框
yleft_on第一個數據框用於匹配的列
right_on第二個數據框用於匹配的列
返回的是新的數據框
import pandas;
df1 = pandas.merge(x, y, left_on, right_on)
簡單計算
result = df.price * df.num
df['sum'] = result
數據標准化
0-1標准化:
x ∗ = x − m i n / m a x − m i n x^* = {x-min}/{max-min} x ∗ = x − m i
n / m a x − m i n
scale = (df.acore-df.score.min())/(df.score.max()-df.score.min())
數據分組
根據分析對象的特征,按照一定的數值指標,把數據分析對象划分為不同的區間部分;
series需要分組的數據
bins分組的划分數組
right分組的時候右邊是否閉合
labels分組的自定義標簽,可以不定義
cur(series, bins, right = True, labels = NULL)
# 先生成兩個系列:數組和標簽
bins = [min(df.cost)-1,20,40,60,80,100,max(df.cost)+1];
labels = ['20以下','20-40','40-60','60-80','80-100','100以上'];
pandas.cut(df.cost,bins,right = Ture, labels = labels)
日期轉換
將字符型數據轉換為日期型數據
%Y年份
%m月份
%d日期
%H小時
%M分鍾
%S秒
返回一個時間格式的系列
df_dt = to_datatime(df.列名, format)
df_df = to_datatime(df.日期, '%y-%m-%d')
日期格式化
將日期型數據轉換為字符型數據
apply(lambda x:處理邏輯)
datatime.strftime(x,format)
df_dt_str = df_dt.apply(lambda x: datatime.strftime(x,'%d-%m-%s'))
日期抽取
從日期格式里面,抽取出需要的部分屬性
datatime列.dt.property
df_dt.dt.year
df_dt.dt.minute
散點圖
import matplotlib
import matplotlib.pyplot as plt
plot(x,y,'.',color = (r,g,b)) #大點使用'o'
plt.xlabel('x軸標簽')
plt.ylabel('y軸標簽')
plt.grid(True) # 背后的方格
plt.show()
RGB顏色設置
(red,green,blue)不是0-255而是0-1
折線圖
-實線
–虛線
-.
:
.
o
,
plot(x,y,style,color,linewidth)
title('title')
餅圖
參數分別是序列、各部分標簽、各部分顏色、需要突出的塊狀序列、占比的顯示格式
pie(x,labels,colors,ecplode,autopct)
柱形圖
參數分別代表x軸的位置序列(一般arrange)、y軸位置序列、柱形圖的寬度、填充顏色
bar(left,height,width,color) #橫向
barh(bottom,width,height,color) # 豎向
直方圖
統計的是數據出現的次數,比較頻數的差異
x需要繪制的向量
color直方圖的填充顏色
bins分組個數
cumulative是否累計計數
hist(x,color,bins,cumulative=False)