【问题标题】:Unable to populate column in dataframe using value from dict which is present in dict inside list in one of the column无法使用来自 dict 的值填充数据框中的列,该值存在于其中一列的列表中的 dict 中
【发布时间】:2022-01-19 15:30:12
【问题描述】:

我在数据框中有一列,其值类似于此列表,其中包含字典

[{'symbol': '$', 'value': 5.2, 'currency': 'USD', 'raw': '$5.20', 'name': '$5.20$5.20 ($1.30/Fl Oz)', 'asin': 'B07N31VZP8']

我只想要这本词典中的“价值”。

for i in df["prices"]:
    try:
        #print(type(i[0]["value"]))
        df["prices"] = df["prices"].apply(lambda i:i[0]["value"])
    except Exception as e:
        print("",e)

但即使我能够获得该值,我也会收到以下错误,我无法将其填充到数据框列中

'float' object is not subscribable

如何解决这个问题?

【问题讨论】:

    标签: python-3.x pandas dataframe dictionary floating-point


    【解决方案1】:

    我认为问题在于您多次应用转换。 apply() 已经对数据框中的每一行应用了转换。如果您删除循环,它应该可以工作:

    import pandas as pd
    
    # Create your data
    df = pd.DataFrame([
        ['test',[{'symbol': '$', 'value': 5.2, 'currency': 'USD', 'raw': '$5.20', 'name': '$5.20$5.20 ($1.30/Fl Oz)', 'asin': 'B07N31VZP8'}]]
        , ['test',[{'symbol': '$', 'value': 6.8, 'currency': 'USD', 'raw': '$5.20', 'name': '$5.20$5.20 ($1.30/Fl Oz)', 'asin': 'B07N31VZP8'}]]
    ], columns=['test','prices'])
    
    print(df)
    
    df["prices"] = df["prices"].apply(lambda i:i[0]["value"])
    
    print(df)
    

    输入数据框:

       test                                             prices
    0  test  [{'symbol': '$', 'value': 5.2, 'currency': 'US...
    1  test  [{'symbol': '$', 'value': 6.8, 'currency': 'US...
    

    输出数据框:

       test  prices
    0  test     5.2
    1  test     6.8
    

    【讨论】:

    • 我必须更新所有行中的值
    • apply 对列中的每一行应用 lambda 函数。正如您在我的示例中看到的那样,它将它应用于两行。我更新了这些值,您可以看到它在第一行中提取了5.2,在第二行中提取了6.8。如果行中有任何差异,向您的问题添加更大的输入会很有帮助。
    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2017-05-02
    • 2020-04-12
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多