轉載自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)]