簡體   English   中英

在幾列中使用python中的zip函數進行迭代會產生錯誤

[英]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)

這將返回一個布爾系列,檢查所需的值是否在每一行中。 然后,您可以簡單地將相對的TrueFalse值替換為1和0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM