更新:
In [44]: df
Out[44]:
0 1 2 3 4 Marketcap
0 1.707280 0.666952 0.638515 -0.061126 2.291747 1.71B
1 -1.017134 1.353627 0.618433 0.008279 0.148128 1.82B
2 -0.774057 -0.165566 -0.083345 0.741598 -0.139851 1.1M
3 -0.630724 0.250737 1.308556 -1.040799 1.064456 30.92M
4 2.029370 0.899612 0.261146 1.474148 -1.663970 476.74k
5 2.029370 0.899612 0.261146 1.474148 -1.663970 -1
In [45]: df[pd.eval(df.Marketcap.replace(['[Kk]','[Mm]','[Bb]'],
['*10**3','*10**6','*10**9'], regex=True) \
.add(' < 35*10**6'))]
Out[45]:
0 1 2 3 4 Marketcap
2 -0.774057 -0.165566 -0.083345 0.741598 -0.139851 1.1M
3 -0.630724 0.250737 1.308556 -1.040799 1.064456 30.92M
4 2.029370 0.899612 0.261146 1.474148 -1.663970 476.74k
5 2.029370 0.899612 0.261146 1.474148 -1.663970 -1
我會做這種方式:
In [13]: df[pd.eval(df.Marketcap.replace(['M','B'],['','*1000'], regex=True).add(' > 35'))]
Out[13]:
0 1 2 3 4 Marketcap
0 1.707280 0.666952 0.638515 -0.061126 2.291747 1.71B
1 -1.017134 1.353627 0.618433 0.008279 0.148128 1.82B
4 2.029370 0.899612 0.261146 1.474148 -1.663970 100.9M
說明:
In [14]: df.Marketcap.replace(['M','B'],['','*1000'], regex=True)
Out[14]:
0 1.71*1000
1 1.82*1000
2 1.1
3 30.92
4 100.9
Name: Marketcap, dtype: object
In [15]: df.Marketcap.replace(['M','B'],['','*1000'], regex=True).add(' > 35')
Out[15]:
0 1.71*1000 > 35
1 1.82*1000 > 35
2 1.1 > 35
3 30.92 > 35
4 100.9 > 35
Name: Marketcap, dtype: object
In [16]: pd.eval(df.Marketcap.replace(['M','B'],['','*1000'], regex=True).add(' > 35'))
Out[16]: array([True, True, False, False, True], dtype=object)
謝謝!我今天晚些時候會看看它,因爲它看起來有點複雜,需要一些時間。順便說一句,爲了得到這些看起來很乾淨的輸出單元(out [178]等),你是否通過命令行完成Ipython的所有操作,然後複製單元格?我試圖複製Jupyter筆記本輸出單元,但是當我粘貼在這裏時,它非常不整潔。 – Moondra
@moondra,是的,對不起,我更喜歡iPython,因爲我是一個控制檯的人;-) – MaxU
嗨,最大,我有一個關於'掩碼'代碼部分的問題; 'df.assign'中的第一個'f'創建一個新列?第二部分「Marketcap = pd.to_numeric」也在創建一個新列?我在理解這部分時遇到了一些麻煩。謝謝! – Moondra