Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Python中的另一列更新列的值_Python_Pandas_Dataframe_Dictionary_Search - Fatal编程技术网

基于Python中的另一列更新列的值

基于Python中的另一列更新列的值,python,pandas,dataframe,dictionary,search,Python,Pandas,Dataframe,Dictionary,Search,我有一个数据帧作为df: 现在,基于第一列['Message']上的字符串处理函数,test(l1,l2)得到一个类似dict的rect_d{}: {'ISIN': ':', 'ISIN :': 'KE5000008986', 'SETTLEMENT DATE': '-', 'SETTLEMENT DATE -': '06/01/2020', 'TRADE DATE': '-'} 基于dict的值,我打算更新不同列上同一行的类似信息,比如基于结算日期的最后一个值,我想更新同一行上的结

我有一个数据帧作为df:

现在,基于第一列['Message']上的字符串处理函数,test(l1,l2)得到一个类似dict的rect_d{}:

{'ISIN': ':',
 'ISIN :': 'KE5000008986',
 'SETTLEMENT DATE': '-',
 'SETTLEMENT DATE -': '06/01/2020',
 'TRADE DATE': '-'}
基于dict的值,我打算更新不同列上同一行的类似信息,比如基于结算日期的最后一个值,我想更新同一行上的结算日期

我已经相应地编写了代码:

for idx, row in df.iterrows():
    split_t=df['Message'][idx].split()
    ret_d= test(items, split_t)
    for key in ret_d:
        print(key)
        if key=='SETTLEMENT DATE' or 'SETTLEMENT DATE:' or 'Settlement date :' or 'SETTLEMENT DATE -':
            df.loc[idx,'SETTLEMENT DATE']=ret_d[key]
        elif key=='ISIN:' or 'ISIN' or 'ISIN :':
            df.loc[idx,'ISIN']=ret_d[key]
        elif key=='CASH ACCOUNT':
            df.loc[idx,'CASH ACCOUNT']=ret_d[key]
        else: print('done')
    break
理想情况下,应该用这些值填充我的df。但它并不是只填充第一个值。

我不能这么做,因为价值观不是那么直接:

df['key']=df['rect_d'].apply(lambda x:rect_d[x])
在更新df的过程中,我遗漏了什么吗?任何见解都将受到高度赞赏

以df.to_dict()格式引用的df:

项目:

items=['SETTLEMENT DATE', 'SETTLEMENT DATE:','Settlement date :','SETTLEMENT DATE -', 'CASH ACCOUNT', 'CASH ACCOUNT:',
       'ISIN:',  'ISIN', 'ISIN :',
       'TRADE DATE','TRADE DATE:']
我们可以通过迭代消息列中的字符串并使用
test
函数将每个字符串映射到
dictionary
来创建记录,然后我们可以从这些记录创建新的数据帧,并从新创建的数据帧更新原始数据帧中的值

df.update(pd.DataFrame([test(items, msg.split()) for msg in df['Message']], index=df.index))

请以文本形式发布您的数据帧值,以便我们可以在我们的系统上创建/测试它,谢谢。@RavinderSingh13已用相同的格式更新。@Strayhorn什么是
?@ShubhamSharma已更新。感谢您的回复,我不认为这样可以在新创建的df中正确填充值。我认为缺少条件检查,它只在三列上填充“-”,在其他列上没有填充任何内容。@Strayhorn请检查编辑,我认为只要您的函数
test
以正确的格式返回包含所有键的字典(
列名
),就应该可以工作这需要更新。@jezrael我肯定会投票支持重新开放。
df.update(pd.DataFrame([test(items, msg.split()) for msg in df['Message']], index=df.index))