社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

我正在尝试用python对csv进行排序/拆分

Patrick • 5 年前 • 1489 次点击  

我得到了一个.csv文件,里面有来自11个不同测量设备的18k行数据。我试着为每一个测量设备拷贝/写一个文件,以便以后可以绘制它们,更容易得到平均值。但是,通过这段代码,我把YT教程和web源代码拼凑在一起,在这些文件中编写的惟一东西是“fieldnames”/列的名称(不管这些东西的正确名称是什么)。 它只是在插入.csv的第一行后停止,而不是在每一行中寻找正确的值并将其插入到新的.csv文件中

我尝试使用for循环,其中有11个不同的if/elif条件,我认为这些条件可以将设备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)

还有9行相同的elif行,从prototype03到prototype12都有不同的名称/条件,除了9,因为该行不在.csv文件中

只有.csv第一行的11个文件 (id,设备id,测量类型,测量值,时间戳) 而不是一大堆的行,其中包含来自.csv文件的数据

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50576
 
1489 次点击  
文章 [ 2 ]  |  最新文章 5 年前
SpghttCd
Reply   •   1 楼
SpghttCd    6 年前

我想最方便的方法是用熊猫 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')
James Steele
Reply   •   2 楼
James Steele    6 年前

如果您安装了pandas,这将读取该文件,并将具有相同“设备id”的所有行写入一个单独的文件,文件名为“设备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")