Python 如何清理此csv数据,以便将其读入数据框
我有一个包含2000万行的CSV文件,如下所示:Python 如何清理此csv数据,以便将其读入数据框,python,csv,data-cleaning,Python,Csv,Data Cleaning,我有一个包含2000万行的CSV文件,如下所示: ["{'ev': 'T', 'sym': 'USB', 'i': '52983542396744', 'x': 10, 'p': 48.51, 's': 12, 'c': [14, 37, 41], 't': 1611074854896, 'z': 1}"] ["{'ev': 'T', 'sym': 'CBSH', 'i': '72', 'x': 7, 'p': 70.69, 's': 5, 'c': [37],
["{'ev': 'T', 'sym': 'USB', 'i': '52983542396744', 'x': 10, 'p': 48.51, 's': 12, 'c': [14, 37, 41], 't': 1611074854896, 'z': 1}"]
["{'ev': 'T', 'sym': 'CBSH', 'i': '72', 'x': 7, 'p': 70.69, 's': 5, 'c': [37], 't': 1611074854897, 'z': 3}"]
["{'ev': 'T', 'sym': 'ACGL', 'i': '3119', 'x': 12, 'p': 34.32, 's': 100, 't': 1611074854899, 'z': 3}", "{'ev': 'T', 'sym': 'ACGL', 'i': '3120', 'x': 12, 'p': 34.32, 's': 100, 't': 1611074854899, 'z': 3}"]
[]
["{'ev': 'T', 'sym': 'USB', 'i': '53070048741687', 'x': 21, 'p': 48.51, 's': 88, 'c': [14, 37, 41], 't': 1611074854896, 'z': 1}"]
[]
["{'ev': 'T', 'sym': 'ROOT', 'i': '486', 'x': 11, 'p': 19.53, 's': 100, 'c': [14, 41], 't': 1611074854903, 'z': 3}"]
数据不干净,因为您可以看到一些行是空列表,一些字典包含键“c”,而其他字典不包含键“c”,一些列表只有一个元素,而其他列表有更多元素
我不知道如何清理这些数据
我最终想做的是清理这个csv文件,然后使用
import pandas as pd
cereal_df = pd.read_csv("file.csv")
您的数据可能是包含Python数据结构列表的行,因为这样一种方法可以是使用
ast
库解析每一行,并将文本转换回实际的Python数据。然后可以用JSON格式将其写回
Pandasread\u json()
函数可用于在中读取该内容。例如:
import pandas as pd
import json
import ast
json_data = []
with open('file.csv', encoding='utf-8') as f_input:
for line in f_input:
line = line.strip()
if line: # skip any empty lines
block = ast.literal_eval(line)
for data in block:
values = ast.literal_eval(data)
json_data.append(values)
with open('output.json', 'w', encoding='utf-8') as f_output:
json.dump(json_data, f_output)
# Read the JSON file back in using Pandas
df = pd.read_json('output.json')
print(df)
这将为您提供如下数据帧:
c ev i p s sym t x z
0[14,37,41]T 52983542396744 48.51 12 USB 1611074854896 10 1
1[37]T 72 70.69 5 CBSH 1611074854897 3
2 NaN T 3119 34.32 100 ACGL 1611074854899 12 3
3 NaN T 3120 34.32 100 ACGL 1611074854899 12 3
4[14,37,41]T 53070048741687 48.51 88 USB 1611074854896 21 1
5[14,41]T 486 19.53 100根1611074854903 11 3
看起来不像csv。。。看起来有点奇怪