ValueError:格式错误的节点或字符串:Pandas 中的 0 [重复]
Posted
技术标签:
【中文标题】ValueError:格式错误的节点或字符串:Pandas 中的 0 [重复]【英文标题】:ValueError: malformed node or string: 0 in Pandas [duplicate] 【发布时间】:2021-03-25 10:07:07 【问题描述】:我有一列将值保存为字典,我使用下面的代码将值解开到两个单独的列中,但是,我正在努力处理具有 Null 值的行(请参阅下面的错误消息): 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: malformed node or string: 0
【问题讨论】:
此average_rating: 4.2, number_of_ratings: 10
不是有效的字典表示。右边是"average_rating": 4.2, "number_of_ratings": 10
sry 刚刚改了
这能回答你的问题吗? Splitting dictionary/list inside a Pandas Column into Separate Columns
提供的解决方案对我不起作用
看来你的字符串既不是字典也不是文字
【参考方案1】:
让我们试试吧:
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
【讨论】:
我收到“格式错误的节点或字符串:0”错误 您可以在没有fillna(0)
的情况下使用更新后的代码重试吗?【参考方案2】:
尝试转换为字典,否则返回默认值的字典:
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
【讨论】:
以上是关于ValueError:格式错误的节点或字符串:Pandas 中的 0 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:错误的节点或字符串:<_ast.Name object at 0x0000016835AEE3D0>
python/Pyqt5 - 如何在使用 ast 和获取 ValueError 时避免 eval:attemt 中的格式错误的字符串以提高代码安全性