我的列json具有以下格式:
"{'id': '7', 'time': 1572741353685, 'number': '003477'}"
"{'id': '7', 'time': 1572741353685, 'number': '003477'}"
"{'id': '7', 'time': 1572741353685, 'number': '003477'}"
"{'id': '7', 'time': 1572741353685, 'number': '003477'}"
我想在熊猫数据框中转换
id time number
7 1572741353685 003477
7 1572741353685 003477
7 1572741353685 003477
7 1572741353685 003477
我为此使用循环,但我想不使用循环。 谢谢
答案 0 :(得分:1)
看起来像您需要的。
import ast
data = ["{'id': '7', 'time': 1572741353685, 'number': '003477'}","{'id': '7', 'time': 1572741353685, 'number': '003477'}","{'id': '7', 'time': 1572741353685, 'number': '003477'}","{'id': '7', 'time': 1572741353685, 'number': '003477'}"]
df = pd.DataFrame(data, columns=['A'])
df_result = pd.DataFrame(df["A"].apply(ast.literal_eval).tolist())
print(df_result)
输出:
id time number
0 7 1572741353685 003477
1 7 1572741353685 003477
2 7 1572741353685 003477
3 7 1572741353685 003477
答案 1 :(得分:1)
在您的情况下,下一个类似的方法应该起作用:
json_rows = [
...
]
df = pd.DataFrame.from_records([
json.loads(row) for row in json_rows
])
当然,它在JSON解析阶段仍然存在循环...
UPD。而且它不是JSON-它是python对象的另一种表示形式,因此您应该像其他答案一样用ast代替json.loads
。
答案 2 :(得分:1)
使用列表推导,将值转换为ast.literal_eval
到字典:
import ast
df = pd.DataFrame([ast.literal_eval(x) for x in df["col"]])
print(df)
id time number
0 7 1572741353685 003477
1 7 1572741353685 003477
2 7 1572741353685 003477
3 7 1572741353685 003477