1. Pandas讀取csv或excel數據時,很可能遇到的columns中,列名會帶有特殊字符,例如:空格、\n、\t、雙空格、引號等等,如果不想手動修改的話,可以df.rename()來解決。
df = pd.read_excel(data_path) df_ = df.rename(columns=lambda x: x.replace(" ","").replace(' ','').replace(" ","").replace(r"\t","").replace(r"\n",""))
如果還有其他的字符,也可以類似解決。
2. python計算標准差時,出現nan:這個原因可能是原始數據都是nan;
但是更有可能是求解std時參數用錯了:因為python求解時,有偏估計和無偏估計是用 ddof參數來選擇的,求標准差時除以的值是:n-ddof。
如果使用numpy計算的話,numpy.std() 求標准差的時候默認是除以 n,即有偏估計;如果要無偏估計,需要在np.std()參數中加入參數 ddof = 1,也就是除以的是n-1;
然而,pandas卻是相反的,它默認是無偏估計,也就是除以 n-1;如果想有偏估計,需要設置參數 ddof=0,即 df.std(ddof=0)。
所以:
如果你的數值序列其他的都是nan,只有一個值不是nan,那么無偏估計時,std求解的標准差就是nan了。
3. 列表、字符串等在直接索引時,不能超出長度范圍;但是切片索引時,卻可以超出范圍,超出范圍時取值一直到末尾。
例如:
a = 'abcdefg' #print(a[10]) # 報錯:IndexError: string index out of range print(a[3:10]) #不報錯:返回 defg b = [2,3,4,5] # print(b[10]) # 報錯:IndexError: string index out of range print(b[2:10]) #不報錯:返回 [4, 5]
4. range函數,有步長參數可用
range(start, stop[, step])
有時候,步長參數可以讓你減少一層for循環的使用。
for ii in range(1,8,2): print(ii)
5. pandas求取眾數 mode() 方法,多個眾數時,求所有眾數的均值
import pandas as pd import numpy as np df = pd.DataFrame({'name':['Jack','Alex','Bob','Nancy','Mary','Alice','Jerry','Wolf'], 'course':['Chinese','Math','Math','Chinese','Math','English','Chinese','English'], 'grade':[1,1,2,2,2,2,3,3], 'score':[85,85,91,78,89,89,78,79]}) print(df.score) aa = df.score.mode() #眾數 print(type(aa)) # <class 'pandas.core.series.Series'> print('aa:',aa) #如果有多個眾數,會形成一個序列返回 print(np.mean(aa)) # 多個眾數時,求均值
注:scipy.stats.mode() 和 df.value_counts() 均可用於求眾數。
參考:
https://blog.csdn.net/katyusha1/article/details/81501893