python - 从列表的字典中提取列表,然后附加到数据框
问题描述
我正在尝试从包含列表的 json 中提取一个字段,然后将该列表附加到数据框中,但我遇到了一些不同的错误。
我想我可以将它写入 csv 然后用 Pandas 读取 csv,但我试图避免写入任何文件。我知道我也可以使用 StringIO 来制作 csv,但这有空字节的问题。替换那些将是(我认为)另一个逐行步骤,这将进一步延长脚本完成所需的时间......我正在针对返回数千个结果的查询运行它,因此保持快速和简单是优先事项
首先我尝试了这个:
hit_json = json.loads(hit)
for ln in hit_json.get('hits').get('hits'):
df = df.append(ln['_source'], ignore_index=True)
print(df)
这给了我一个看起来像这样的结果:
1 2 3 4
a b d,e,f... x
然后我尝试了这个:
df = df.append(ln['_source']['payload'], ignore_index=True)
但这给了我这个错误:
TypeError: cannot concatenate object of type "<class 'str'>"; only pd.Series,
pd.DataFrame, and pd.Panel (deprecated) objs are valid
我正在寻找的是这样的:
0 1 2 3 4
d e f g h
最重要的是...我需要找出一种方法来处理此列表中包含逗号的特定字符串...这可能是一个令人头疼的问题,最好在另一个问题中处理...例如:
# Obviously this is incorrect but I think you get the idea :)
str.replace(',', '^')
except if ',' followed by ' '
非常感谢任何帮助!
编辑按要求添加 JSON
{
"_index": "sanitized",
"_type": "sanitized",
"_id": "sanitized".,
"_score": sanitized,
"_source": {
"sanitized": sanitized,
"sanitized": "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,\"34,35\",36,37,38,39,40",
"sanitized": "sanitized",
"sanitized": ["sanitized"],
"sanitized": "sanitized",
"sanitized": "sanitized",
"sanitized": "sanitized",
"sanitized": "sanitized",
}
}]
}
}
解决方案
你也许可以用 StringIO 写一个临时文件,就像在这里做的那样。
然后对于第二部分你可以做
if ',' in data and ', ' not in data:
data = data.replace(',', '^')
推荐阅读
- php - 如何获取表格特定列中的项目
- python - TypeError:必须是str,而不是float(Python,返回值)
- javascript - 如何在给定 URL 的情况下获取类名的内部文本 - Javascript
- react-native - 设置权限后是否会刷新本机应用程序?(仅限 iOS)
- php - Symfony 4 DateTimeNormalizer 服务未应用
- python - **kwargs 和默认参数
- go - 带有通道的循环中的 goroutine
- amazon-web-services - 从 Amazon s3 存储桶中提取文件时随机 ssl 握手失败
- r - How can I identify the rows based on one string in a sentence
- javascript - 解析 Json 以使用 Javascript 呈现多行 highstock 图表