![](/img/trans.png)
[英]How to round values only for display in pandas while retaining original ones in the dataframe?
[英]How to get the filtered dataframe for calculations while retaining the original one in pandas?
我對熊貓如何使用過濾后的行有些困惑。 假設我們有這個市場數據數據框“ df”:
Time Open High Low Close Volume
31.12.2003 23:00:00.000 82440 83150 82440 82880 47686.32
01.01.2004 23:00:00.000 82830 83100 82350 83100 37571.04
02.01.2004 23:00:00.000 83100 83100 83100 83100 0.00
現在,我們對行進行過濾,以僅在市場開放的那一天(交易量> 0)獲得df
df=df[df['Volume']>0]
由於我們過濾了數據框的方式,有一些空行仍然具有索引和值,但是例如,如果這樣做,它們就不會用於計算中:
df.mean()
過濾后的行的值不會出現在計算中。
令人困惑的部分是:
僅使用未過濾的值,如何計算從第3行算起的最后2個值的平均值? 意思是,如果我們將第2行過濾掉,則應該得到第3行和第1行的平均值。
-----------編輯--------------嘿,謝謝你的評論,試圖更加清楚:
假設我們有以下示例數據框:
Index Volume
0 1
1 0
2 1
3 1
然后我們對其進行過濾:
df=df[df['Volume']>0]
如果我們將數據幀發送到numpy,則為了繪制或遍歷該數據幀,它還將發送我們不需要的行。
如果我們迭代這些數據,它還將迭代(並考慮)我們要排除的索引。
那么,如何避免排除排除行的數據框副本,從而避免這兩個問題?
我認為您在布爾索引方面遇到了一個非常普遍的問題。 當你試圖篩選DataFrame
與DataFrame
的布爾值,則需要指定如何處理那里的東西是真正的某些列/行,但假的其他列/行的情況。 你想去的地方東西都是真的無處不在 ,或任何物品。
在這種情況下,這特別棘手,因為您的DataFrame
是一維的,因此您希望事情像Series
一樣工作,而在其中沒有歧義:對於Series
,行要么為True,要么為False; 在某些列中不能為True,而在其他列中不能為False。
要解決與DataFrames
的歧義,請使用any()
或all()
方法:
In [36]: df
Out[36]:
Volume
Index
0 1
1 0
2 1
3 1
[4 rows x 1 columns]
In [37]: df[(df > 0).all(1)]
Out[37]:
Volume
Index
0 1
2 1
3 1
[3 rows x 1 columns]
all()
內部的1
僅表示1
軸(列)
這是一個二維示例,可以幫助您解決問題:
In [39]: df = pd.DataFrame({"A": ['a', 'b', 'c', 'd'], "B": ['e', 'f', 'g', 'h']})
In [40]: df
Out[40]:
A B
0 a e
1 b f
2 c g
3 d h
[4 rows x 2 columns]
In [41]: bf = pd.DataFrame({"A": [True, True, False, False], "B": [True, False, True, False]})
In [42]: bf
Out[42]:
A B
0 True True
1 True False
2 False True
3 False False
[4 rows x 2 columns]
首先,以“錯誤”的方式解決歧義。 目前尚不清楚該如何處理(1,'B'),因為它在bf
false,但是有1
行和B
列,因此填充了一個NaN
:
In [43]: df[bf]
Out[43]:
A B
0 a e
1 b NaN
2 NaN g
3 NaN NaN
[4 rows x 2 columns]
全部都只匹配第一行,因為那是唯一兩個都為True的行:
In [44]: df[bf.all(1)]
Out[44]:
A B
0 a e
[1 rows x 2 columns]
any
匹配除最后一行以外的所有內容,因為該行同時具有False
es
In [45]: df[bf.any(1)]
Out[45]:
A B
0 a e
1 b f
2 c g
[3 rows x 2 columns]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.