【python】pandas、numpy使用的中技巧


轉載自https://zhuanlan.zhihu.com/p/21337237

 

問題一、dataframe里面.values,.iloc,.ix,.loc的區別?

只有values是將原本dataframe數據強制轉化為numpy格式的數據來索引,其他3個都是對dataframe本身的數據來索引,其中iloc是對基於values的位置來索引調用,loc是對index和columns的位置來索引,而ix則是先用loc的方式來索引,索引失敗就轉成iloc的方式;

 

問題二、可否有兩層,或2層以上的columns或index?有的話如何索引?

可以,索引的話如果用loc或ix,則默認是用第一層的index或columns,最簡單的方式是類似於這樣:

example.loc[index1, columns1].loc[index2, columns2]

 

問題三、list, dict, numpy.ndarray, dataframe數據格式如何轉換?

1. list轉化為numpy.ndarray:

np.array(example)

2. numpy.ndarray轉化為list:

list(example)

3. dict轉化為dataframe:

example['a'] = {'bb':2, 'cc':3}
eee = pd.DataFrame(example)

4. numpy.ndarray轉化為dataframe:

pd.DataFrame(example)

5. dataframe轉化為numpy.ndarray:

example.values[:, :]



問題四、numpy.ndarray和dataframe如何填補nan,inf?

1. 對於numpy.ndarray來說:

example = np.where(np.isnan(example), 0, example)
example = np.where(np.isnan(example), 0, example)

2. 對於dataframe來說:

既可以用example.fillna(),還可以用example.replace(a, b)

 

問題五、各種OI的效率快慢問題?

1. npy讀寫效率最高,但最費硬盤空間,比如np.load(), np.save();

2. csv其次,比如pd.Dataframe.to_csv(),pd.load_csv();

3. txt讀寫,當然也可以很快,但是需要頻繁的split,對格式規范的數據比較麻煩;

4. 至於簡單的excel和word,可以用xlrd,xlwt來操作;

 

問題六、關於常見的os操作,包括新建文件夾、遍歷文件夾的操作問題?

 

1. 新建文件夾:

if not os.path.isdir(path_out): os.makedirs(path_out) 

2. 遍歷所有文件和子文件夾:

for a, b, filenames in os.walk(path_data): for filename in filenames: 

只遍歷當前文件,不包含子文件夾:

for a, b, filenames in os.walk(path_data): for filename in filenames: if a == path_data: 

 

問題七、numpy.ndarray和dataframe如何選取滿足條件的行和列數據?

1. 根據新的columns來選取:

frame_[newcolumns]

2. 根據新的index來選取:

frame_[frame_.index.isin(newindex)]

3. 根據某一行或者列的條件來選取:

假如是根據dataframe的第一列,必須大於start_time這個常數,frame_ = frame_.ix[:, frame_.ix[0, :] >= start_date]
或者是根據dataframe的第一行,必須大於start_time這個常數,frame_ = frame_.ix[frame_.ix[:, 0] >= start_date, :]

 

問題八、如何計算相關性矩陣?

將y和所有x放入到sample = numpy.ndarray下,然后直接np.corrcoef(sample ),默認的是皮爾森相關系數,當然,也可以用ranked correlation,也就是spearman correlation,可以直接用scipy.stats.spearmanr。



問題九、如何取出一串字符串里面的字母或者數字?

1. 取出example里面的數字:
int(''.join(x for x in example if x.isdigit()))
2. 取出example里面的字母:
(''.join(x for x in example if x.alpha()))

 

問題十、各種merge操作?

1. 縱向merge 格式為numpy.ndarray的數據:

 

np.hstack((example1, example2))

2. 縱向merge 格式為dataframe的數據,並根據dataframe的index來merge,merge后保留原本各自列的所有index,其他沒有該index的列則對應數值為nan:

 

pd.concat([example1, example2], axis=1)

3. 縱向merge,但是只保留公共的index行:

example.sort_index(axis=1, inplace=True)

4. 橫向merge格式為numpy.ndarray的數據:

 

np.vstack((example1, example2))

5. 橫向merge 格式為dataframe的數據,並根據dataframe的column來merge,merge后保留原本的index和columns,其他沒有該index或columns的列則對應數值為np.nan:

pd.concat([example1, example2], axis=0)

6. 橫向merge,但是只保留公共的columns列:

example.sort_index(axis=0, inplace=True)

 

問題十一、對dataframe數據的index統一加一個后綴

比如對原本dataframe下的index=[‘aa’, 'cc', 'dddddd']的,統一加上一個_5m的后綴,通常的操作大家一般就是直接example.index = [x + '_5m' for x in example.index],這個其實會產生些小問題,因為默認的index是pandas.indexes.base.Index,這個格式可能會默認index里面數據的長度是確定的,導致加_5m后綴失敗,所以需要先把格式強制轉化為list, 像這樣:example.index = [x + '_5m' for x in list(example.index)]


免責聲明!

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



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