我一直在为学术目的收集历史 Twitter 数据,我的最终目标是在 Postgres 中结构化和组织数据。但是,我在从 API 展平杂乱的嵌套数据时遇到了一些问题。
我从每个 API 请求中获得了一堆 JSONL 文件,并且我一直在尝试在 Jupyter Notebook 上使用 python 中的数据框处理这些数据。
每个文件都包含嵌套的 JSON 文件:
import pandas as pd
import json
def load_jsonl(input_path) -> list:
"""
Read list of objects from a JSON lines file.
"""
data = []
with open(input_path, 'r', encoding='utf-8') as f:
for line in f:
data.append(json.loads(line.rstrip('\n|\r')))
print('Loaded {} records from {}'.format(len(data), input_path))
return data
data = load_jsonl(r"filepath")
db_data = []
db_cols = ['data', 'meta']
for d in data:
db_data.append([])
for col in db_cols:
db_data[-1].append(d.get(col, float('nan')))
df = pd.DataFrame(db_data, columns=db_cols)
输出: 数据框
然后,我使用 JSON normalize 来解压缩嵌套的“数据”部分:
from pandas.io.json import json_normalize
df2 = json_normalize(data,record_path = ['data'], sep = '_', errors ='ignore')
这给了我这个输出:数据框
但是,还有其他嵌套列我想展平,但我一直面临问题。当我应用相同的规范化函数时,我得到“TypeError:字符串索引必须是整数”。
我对 python 很陌生,我想了解正在发生的事情以及解决此问题的可能性。另一层复杂性是其余嵌套列具有重复的记录,例如:
[{'start': 0, 'end': 5, 'probability': 0.4693, 'type': 'Place', 'normalized_text': 'Lisboa'}, {'start': 14, 'end': 28, 'probability': 0.6417, 'type': 'Place', 'normalized_text': 'Av. de Brasília'}, {'start': 38, 'end': 54, 'probability': 0.7361, 'type': 'Place', 'normalized_text': 'Algés - Alcântara'}]
总之,我现在的目标是展平包含这些数据的列并创建诸如“normalized_text”之类的列,其中我将有一个列列出 Lisboa, Av. de Brasília 和 Algés-Alcântara。
如果需要额外的信息,请告诉我,这是我在 stackoverflow 中的第一篇文章!