我有下面的数据框架。最后一列"entities“是一个字典列表。
dict0 = [{'name': 'require-once', 'type': 'OTHER', 'mid': None, 'wikipediaUrl': None, 'numMentions': 4, 'avgSalience': 0.014624}, {'name': 'require_once', 'type': 'OTHER', 'mid': None, 'wikipediaUrl': None, 'numMentions': 4, 'avgSalience': 0.008366},{'name': 'funkytaurusmedia.com/includes/header.php', 'type': 'UNKNOWN', 'mid': '/m/02dnj_', 'wikipediaUrl': 'https://en.wikipedia.org/wiki/Header_(computing)', 'numMentions': 2, 'avgSalience': 0.007887},{'name': 'public_html', 'type': 'UNKNOWN', 'mid': '/m/03g20', 'wikipediaUrl': 'https://en.wikipedia.org/wiki/HTML', 'numMentions': 28, 'avgSalience': 0.007139}, {'name': 'public_html', 'type': 'PERSON', 'mid': None, 'wikipediaUrl': None, 'numMentions': 1, 'avgSalience': 0.007139}]
dict1 = [{'name': 'require-once1', 'type': 'OTHER', 'mid': None, 'wikipediaUrl': None, 'numMentions': 4, 'avgSalience': 0.014624}, {'name': 'require_once', 'type': 'OTHER', 'mid': None, 'wikipediaUrl': None, 'numMentions': 4, 'avgSalience': 0.008366},{'name': 'funkytaurusmedia.com/includes/header.php', 'type': 'UNKNOWN', 'mid': '/m/02dnj_', 'wikipediaUrl': 'https://en.wikipedia.org/wiki/Header_(computing)', 'numMentions': 2, 'avgSalience': 0.007887},{'name': 'public_html', 'type': 'UNKNOWN', 'mid': '/m/03g20', 'wikipediaUrl': 'https://en.wikipedia.org/wiki/HTML', 'numMentions': 28, 'avgSalience': 0.007139}]
df = pd.DataFrame({"date":{0:1522254600000, 1:1132254600000 },"url":{0:"http", 1:"http1"},"lang":{0:"de", 1:"de"},"polarity":{0:-0.8, 1:0.8},"magnitude":{0:10.3, 1:11},"score":{0:-0.5, 1:0.5},"entities": {0:dict0, 1:dict1}})
df我使用以下代码行将此数据保存到csv文件中。
df.to_csv('GEG.csv', index = False, header=True)然后,我将它上传到驱动器中,并使用以下代码从colab笔记本中读取它。
dataFrame = pd.read_csv("drive/MyDrive/GEG.csv")读完后,我试图对列"entities“进行一些处理,但我发现在保存和读取数据的过程中,最后一列被转换为字符串。有没有办法在不改变最后一列(字典列表)的格式的情况下保存此数据框并再次读取它?
发布于 2021-07-07 23:04:58
这里基本上有两个选择。
您可以对数据帧进行筛选,然后当您重新加载它时,它将恢复原样。
我更喜欢使用json.loads来处理这类任务。
在读取csv之后,将json.loads应用于其中包含有效json的列。
import json
df['col_with_json_str'] = df['col_with_json_str'].apply(lambda x: json.loads(x))如果您的字典不是有效的json,则需要使用ast.literal_eval。这仍然比eval更好,您不应该使用eval。
import ast
dataFrame = pd.read_csv("GEG.csv")
dataFrame['entities'] = dataFrame['entities'].apply(ast.literal_eval)不要使用eval,除非你真的不关心安全性。请参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#never_use_eval!
https://stackoverflow.com/questions/68288246
复制相似问题