当前位置: 首页 > 知识库问答 >
问题:

错误:格式错误的节点或字符串:0在熊猫[重复]

袁琪
2023-03-14

我有一个列,其中的值保存为字典,我使用下面的代码将值分解为两个单独的列,但是,我正在努力处理具有空值的行(请参见下面的错误消息):df

product_id    product_ratings
2323          {"average_rating": 4.2, "number_of_ratings": 10}      
4433          {"average_rating": 4.3, "number_of_ratings": 31}
3454          {"average_rating": 4.5, "number_of_ratings": 23}
4552          {"average_rating": 4.1, "number_of_ratings": 13}
3422          None

desired_output_df

product_id   average_rating  number_of_ratings
2323         4.2             10
4433         4.3             31
3454         4.5             23
4552         4.1             13
3422         0               0 

我的代码:

import ast
import pandas as pd 
df = pd.read_csv('path')
df = df.fillna(0)

dict_df = pd.DataFrame([ast.literal_eval(i) for i in df.product_ratings.values])
df2 = df.drop('product_ratings',axis=1)
final_df = pd.concat([df2,dict_df],axis=1)
final_df

但是,我收到以下错误:ValueError:节点或字符串格式错误:0

共有2个答案

漆雕升
2023-03-14

让我们试试:

df = pd.read_csv('path')


dict_df = pd.DataFrame([ast.literal_eval(i) if i !='None' or i is not None else 
                        dict()
                        for i in df.product_ratings.values]
                      ).fillna(0)

final_df = df.drop('product_ratings', axis=1).join(dict_df)

输出:

   product_id  average_rating  number_of_ratings
0        2323             4.2               10.0
1        4433             4.3               31.0
2        3454             4.5               23.0
3        4552             4.1               13.0
4        3422             0.0                0.0
宋明亮
2023-03-14

尝试转换为dictionary,否则返回带有默认值的dictionary:

def try_literal_eval(e):
    try:
        return ast.literal_eval(e)
    except ValueError:
        return {'average_rating': 0, 'number_of_ratings': 0}


res = pd.DataFrame(df['product_ratings'].apply(try_literal_eval).tolist())
output = pd.concat((df.drop('product_ratings', 1), res), axis=1)
print(output)

输出

   product_id  average_rating  number_of_ratings
0        2323             4.2                 10
1        4433             4.3                 31
2        3454             4.5                 23
3        4552             4.1                 13
4        3422             0.0                  0
 类似资料:
  • 问题内容: 使用uCanaccess检索保存在桌面中的数据库时出现错误。 我的代码如下: 导入java.util.Scanner; 导入java.sql。*; 公共类dbTest1 { } 我将很乐意为您解决此错误提供任何建议。 谢谢,文斯 问题答案: 好吧,首先,导入您的库(lib文件夹中的jar文件)。http://sourceforge.net/projects/ucanaccess/fil

  • 有人能告诉我这个: 在第二行,我得到一个错误。但这行得通: 我需要更多的文字后,我打印的名称。有人知道怎么做吗?

  • 问题内容: 众所周知,使用存在潜在的安全风险,因此提倡使用 但是在python 2.7中,运行此示例时会返回: 而在python 3.3中,此示例按预期工作: 为什么它在python 3而不是python 2上运行?如何在不使用高风险函数的情况下在python 2.7中进行修复? 问题答案: 这在Python 2上不起作用的原因在于它的实现。当righth操作数为复数时,原始实现只对加法和减法执行

  • 问题内容: 我已经使用熊猫成功读取了一个csv文件。当我尝试从数据框中打印特定列时,出现键盘错误。因此,我与错误共享代码。 ** 有人可以帮我吗? 问题答案: 我认为首先最好调查一下,什么是真实的列名,如果转换成更好的列表会看到一些空格或类似的东西: print (reviews_new.columns.tolist()) 我认为可能有2个问题(显然): 1.列名中的空格(也可能在数据中) 解决方

  • 问题内容: 我收到以下错误: 第一个字段是格式。 有任何想法吗? 谢谢。 问题答案: 当您将字符串值插入日期列时,则需要在使用函数期间将其转换为日期。使用此功能时,您将提供字符串的格式。 功能格式: 因此,您的查询将如下所示: 参见带有演示的SQL Fiddle

  • 我用Apache POI用字符串公式创建Excel文件,得到#VALUE!结果文件中有错误。 源代码是 (printCellInfo是我下面讲的Info方法)而错误单元格是B1。Excel显示“单元格中使用的值的数据类型不正确”。但是如果打开这个单元格进行编辑(使用F2)并按回车键-公式计算正确!!! 现在关于手机信息。帮助方法是 主执行的输出为 所以B0一开始是空白,公式插入后是数字。为什么PO