0

我有熊猫初学者的问题。我拿了一个样本熊猫数据框

import pandas as pd
import numpy as np
df = pd.DataFrame({'num_legs': [2, 4, 8, 0],
               'num_wings': [2, np.nan, np.nan, 0],
               'num_specimen_seen': [10, 2, 1, 8]},
              index=['falcon', 'dog', 'spider', 'fish'])
for i in range(len(df)):
  if pd.isnull(df['num_wings'][i]) == True:
    if (df['num_legs'][i] == 4):
      df['num_wings'][i] == 8
    else:
      df['num_wings'][i] ==6

但该值仍为 NaN。如何更改值

4

2 回答 2

0

您可以尝试以下代码:
此处pd.options.mode.chained_assignment = None抑制在执行时发生的SettingWithCopyWarning,但它只是警告,*代码将在没有pd.options.mode.chained_assignment = None的情况下执行。

import pandas as pd
import numpy as np
pd.options.mode.chained_assignment = None
df = pd.DataFrame({'num_legs':[2,4,8,0],
                    'num_wings':[2,np.nan,np.nan,0],
                   'num_specimen_seen':[10,2,1,8]},
                   index=['falcon','dog','spider','fish'])
for i in range (len(df)):
    if pd.isnull(df['num_wings'][i])==True:
        df['num_wings'][i]=8
    else:
        df['num_wings'][i]=6
print(df)
于 2020-07-23T17:07:58.543 回答
0

您可以使用numpy.where做到这一点:

import numpy as np

df['num_wings'] = np.where(np.logical_and(pd.isnull(df['num_wings']), df['num_legs'] == 4), 8, df['num_wings'])

num_wingsnum_wings为空且为 4 时,这会将列设置num_legs为 8。否则将保留该num_wings值。

于 2020-07-23T15:33:31.127 回答