繁体   English   中英

python pandas 基于另一列的列值条件编辑

[英]python pandas conditional editing of column values based on another column

提示:本站提供中英文对照查看,鼠标放在中文字句上可显示英文原文。 若本文未解决您的问题,推荐您尝试使用帮您解决。

我有一个关于 pandas 的初学者问题。 我拿了一个样本 pandas 数据框

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。 如何更改值

您可以使用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_wings为 null 且num_legs为 4 时,这会将列num_wings设置为 8。否则将保留num_wings值。

您可以尝试以下代码:
这里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)
问题未解决?试试使用:帮您解决问题。
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM