我对Pandas非常陌生,如果这是一个非常愚蠢的问题,我深表歉意。对于下面的屏幕快照链接,如果ge65_suppress_flag的值带有#符号,我想将total_claim_count_ge65下的NaN值更改为5。我想使用一个for循环遍历ge65_suppress_flag列,每次遇到#符号时,它将在下一列(total_claim_count_ge65)中将NaN值更改为5。
答案 0 :(得分:0)
尝试类似的东西:
df[df['ge65_suppress_flag'] == '#']['total_claim_count_ge65'].fillna(5, inplace=True)
答案 1 :(得分:0)
没有菜鸟问题,我之前也有这个问题。 因此,这是一个典型的vlookup函数,是通过python pandas,xlsxwriter实现的ez 1.从脚本中阅读ur excel和表格, 2.找到ur单元,可以从excel阅读器或提供的库python中找到它。 3.逻辑是处理行和列,比较单元格并覆盖。 注意:请勿尝试在python和Microsoft Excel Reader中打开excel文件,否则会出错。 您可以找到一些示例,然后对位进行处理就可以了。
快乐编码!
答案 2 :(得分:0)
创建类似的数据框
import pandas
df1 = pd.DataFrame({"ge65_suppress_flag": ['bla', 'bla', '#', 'bla'], "total_claim_count_ge65": [1.0, 2.0, None, 4.0]})
在ge65_suppress_flag
列值等于'#'的行中填充5.0
df1.loc[df1['ge65_suppress_flag']=="#", 'total_claim_count_ge65'] = 5.0
答案 3 :(得分:0)
在给您解决方案后,我将逐步说明。
这是行之有效的。
df[df[0]=='#'] = df[df[0]=='#'].fillna(5)
为了使解决方案更通用,我根据您的屏幕截图使用了列的索引。您可以更改索引号,也可以通过名称指定,例如:df['name_of_column']
分步说明:
首先,您要使用第一列df [0]中的变量属性来仅选择等于字符串'#'的那些属性:
df[df[0]=='#']
接下来,使用熊猫fillna function将np.NaN的所有变量属性替换为5:
df[df[0]=='#'].fillna(5)
根据fillna文档,此函数返回一个新的数据框。因此,为避免这种情况,您希望将数据框的子部分设置为函数返回的内容。
df[df[0]=='#'] = df[df[0]=='#'].fillna(5)
答案 4 :(得分:0)
将df.apply
与lambda
一起使用:
d = {'ge65_suppress_flag': ['not_supressed','not_supressed','#'], 'total_claim_count_ge65': [516.03, 881.0, np.nan]}
df = pd.DataFrame(data=d)
df['total_claim_count_ge65'] = df.apply(lambda x: 5 if x['ge65_suppress_flag']=='#' else x['total_claim_count_ge65'], axis=1)
print(df)
打印:
ge65_suppress_flag total_claim_count_ge65
0 not_supressed 516.03
1 not_supressed 881.00
2 # 5.00