我正在尝试 sort/split python 中的 csv
I'm trying to sort/split a csv in python
我得到了一个 .csv 文件,其中包含来自 11 种不同测量设备的 18k 行数据。我正在尝试为每个测量设备 copy/write 一个文件,这样我可以稍后绘制它们,更容易获得平均值。但是,使用这段代码,我将 YT 教程和网络资源拼凑在一起,这些文件中唯一写入的内容是 "fieldnames"/列的名称(无论这些内容的正确名称是什么。
它只是在插入 .csv 的第一行后停止,而不是在每一行中查找正确的值并将其插入到新的 .csv 文件中
我尝试使用一个 for 循环,其中有 11 个不同的 if/elif 条件,我认为它会将 device_id 的列过滤到正确的设备文件。
import csv
with open('Data.csv', 'r') as Data_puntenOG:
Data_punten = csv.DictReader(Data_puntenOG)
for line in Data_punten:
if line['device_id'] == 'prototype01':
with open('HS361.csv', 'w') as HS361:
csv_HS361 = csv.writer(HS361)
csv_HS361.writerow(line)
elif line['device_id'] == "prototype02":
with open('MinID8.csv', 'w') as MinID8:
csv_MinID8 = csv.writer(MinID8)
csv_MinID8.writerow(line)
然后是从 prototype03 到 prototype12 的另外 9 个具有不同名称/条件的相同 elif 行,除了 9,因为那一个不在 .csv 文件中
11 个文件只有 .csv 文件的第一行
(id,device_id,measurement_type,measurement_value,时间戳)
而不是一大堆来自 .csv 文件的数据行
如果您安装了 pandas,这将读取文件并将具有相同 'device_id' 的所有行写到一个单独的文件中,文件名是 'device_id' .
import pandas as pd
df = pd.read_csv('Data.csv')
EDIT:
for id in df['device_id'].unique():
df[df['device_id'] == id].to_csv(f"{id}.csv")
我认为最方便的方法是使用 pandas' groupby
,因为它提供了唯一的 id 和它们对应的子数据帧:
import pandas as pd
df = pd.read_csv('Data.csv')
for id, group in df.groupby('device_id'):
group.to_csv(f'{id}.csv')
我得到了一个 .csv 文件,其中包含来自 11 种不同测量设备的 18k 行数据。我正在尝试为每个测量设备 copy/write 一个文件,这样我可以稍后绘制它们,更容易获得平均值。但是,使用这段代码,我将 YT 教程和网络资源拼凑在一起,这些文件中唯一写入的内容是 "fieldnames"/列的名称(无论这些内容的正确名称是什么。 它只是在插入 .csv 的第一行后停止,而不是在每一行中查找正确的值并将其插入到新的 .csv 文件中
我尝试使用一个 for 循环,其中有 11 个不同的 if/elif 条件,我认为它会将 device_id 的列过滤到正确的设备文件。
import csv
with open('Data.csv', 'r') as Data_puntenOG:
Data_punten = csv.DictReader(Data_puntenOG)
for line in Data_punten:
if line['device_id'] == 'prototype01':
with open('HS361.csv', 'w') as HS361:
csv_HS361 = csv.writer(HS361)
csv_HS361.writerow(line)
elif line['device_id'] == "prototype02":
with open('MinID8.csv', 'w') as MinID8:
csv_MinID8 = csv.writer(MinID8)
csv_MinID8.writerow(line)
然后是从 prototype03 到 prototype12 的另外 9 个具有不同名称/条件的相同 elif 行,除了 9,因为那一个不在 .csv 文件中
11 个文件只有 .csv 文件的第一行 (id,device_id,measurement_type,measurement_value,时间戳) 而不是一大堆来自 .csv 文件的数据行
如果您安装了 pandas,这将读取文件并将具有相同 'device_id' 的所有行写到一个单独的文件中,文件名是 'device_id' .
import pandas as pd
df = pd.read_csv('Data.csv')
EDIT:
for id in df['device_id'].unique():
df[df['device_id'] == id].to_csv(f"{id}.csv")
我认为最方便的方法是使用 pandas' groupby
,因为它提供了唯一的 id 和它们对应的子数据帧:
import pandas as pd
df = pd.read_csv('Data.csv')
for id, group in df.groupby('device_id'):
group.to_csv(f'{id}.csv')