[英]Iterating with zip function in python, over several columns, gives error
我有一個這樣的熊貓數據框:
dx1 dx2 dx3 dx4 dx5 dx6 dx7
0 25041 40391 5856 0 V4511 V5867 30000
1 25041 40391 25081 5856 5363 3572 0
2 25041 40391 42822 0 5856 0 0
3 25061 40391 0 0 0 0 0
4 25041 40391 0 5856 25081 V4511 25051
我想為像5856這樣的單元格值創建其他列。因此,如果5856出現在任何dxs列的特定行中,則將出現5856列,其值為1或0。 我正在使用此代碼。 它不會給出任何錯誤,但是會發出警告,並且不會以正確的方式填充新列。
X11['5856'] = np.NAN
i = 0
for value in zip(X11.loc[:,'dx1':'dx59']):
if value == 5856:
X11['5856'][i] = 1
else:
X11['5856'][i] = 0
i+1
我得到的聲音是這樣的:
C:\Anaconda3\lib\site-packages\ipykernel\__main__.py:8: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
我正在獲取5856列,其值:0,NaN,NaN .....
這是預期的結果:實際上,我想為不同的單元格值(例如25041、5363等)創建多個列。
dx1 dx2 dx3 dx4 dx5 dx6 dx7 5856
0 25041 40391 5856 0 V4511 V5867 30000 1
1 25041 40391 25081 5856 5363 3572 0 1
2 25041 40391 42822 0 5856 0 0 1
3 25061 40391 0 0 0 0 0 0
4 25041 40391 0 5856 25081 V4511 25051 1
要在數據.isin
找到特定值,我將使用.isin
方法,如下所示:
# Add a column
df['5856'] = df.isin([5856]).any(1)
這將返回一個布爾系列,檢查所需的值是否在每一行中。 然后,您可以簡單地將相對的True
或False
值替換為1和0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.