如何在数据框中转换具有特殊格式的列

时间:2019-11-06 11:19:29

标签: pandas list dataframe

我的列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

我为此使用循环,但我想不使用循环。 谢谢

3 个答案:

答案 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