我有一个包含数百万行的大型 JSON 文件。该文件中还包含一些错误消息。以下是示例:
{"MEASUREMENT_1":"12345678","MEASUREMENT_2":"123456789012","MEASUREMENT_3":"MEASUREMENT_TYPE","MEASUREMENT_4":1111111111111,"MEASUREMENT_5":-1122,"MEASUREMENT_6":-2233,"MEASUREMENT_7":"123456789"}
{"MEASUREMENT_1":"87654321","MEASUREMENT_2":"987654321098","MEASUREMENT_3":"MEASUREMENT_TYPE_2","MEASUREMENT_4":222222222222,"MEASUREMENT_5":-4455,"MEASUREMENT_6":-6677,"MEASUREMENT_7":"123456789"}
[2015-12-02 02:00:02,530] WARN Reconnect due to socket error: null
[2015-12-02 02:00:02,633] WARN Reconnect due to socket error: null
如预期,由于文件中的错误信息行,下面的代码会抛出一个 ValueError 异常。
#!/usr/bin/python3.5
import pandas as pd # Version 0.21.0
df = pd.read_json(file, lines=True)
由于文件过大,我使用了以下代码中的 `chunksize` 和异常处理:
由于文件很大,我使用了以下代码中的chunksize
和异常处理:
max_records = 1e5
df = pd.read_json(file, lines=True, chunksize=max_records)
filtered_data = pd.DataFrame() # Initialize the dataframe
try:
for df_chunk in df:
filtered_data = pd.concat([filtered_data, df_chunk])
except ValueError:
print ('\nSome messages in the file cannot be parsed')
但上述方法的缺点是会忽略一些行。有没有更好的方法来解决这个问题呢?我已经查看了http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html的文档,但没有找到任何可以忽略未解析行的内容。可以有人帮忙吗?