如何根据csv文件的列值获取行并将其保存到csv中?

时间:2019-06-03 18:11:49

标签: python pandas csv dataframe row

我正在尝试使用python来完成任务,而我是python的入门者。我有一个很大的csv文件,其中我必须根据特定列的值划分成不同的csv文件。例如,在color列中所有包含Red值的行,将其保存在一个csv文件中;如果具有蓝色值,则将包含蓝色值的行保存在其他csv文件中。

正如我所说,这是一个很大的csv文件,我要过滤的列中有很多彼此不同的值,因此写入所有值将很繁琐,但如果没有其他方法,将不会没问题。

有人知道如何执行此任务吗?

示例:

name  age colour grade
John  15  Red     8
Lucy  14  Blue    7
Katty 15  Red     9
Rob   16  Green   6
Mike  14  Blue    10

解决方案:

red_colour.csv
name  age colour grade
John  15  Red     8
Katty 15  Red     9

green_colour.csv
name  age colour grade
Rob   16  Green   6

blue_colour.csv
name  age colour grade
Lucy  14  Blue    7
Mike  14  Blue    10

编辑:我已经使用了代码,但是我不知道为什么读取文件时出错。我正在RedHat机器中阅读它。

# python3.6 example_read.py
Traceback (most recent call last):
  File "example_read.py", line 3, in <module>
    df = pandas.read_csv('/home/usrlogr/lista_blanca.csv')
  File "/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py", line 702, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py", line 429, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py", line 895, in __init__
    self._make_engine(self.engine)
  File "/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py", line 1122, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py", line 1853, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas/_libs/parsers.pyx", line 387, in pandas._libs.parsers.TextReader.__cinit__
  File "pandas/_libs/parsers.pyx", line 705, in pandas._libs.parsers.TextReader._setup_parser_source
FileNotFoundError: [Errno 2] File b'/home/usrlogr/lista_blanca.csv' does not exist: b'/home/usrlogr/lista_blanca.csv'

有人知道是什么问题吗?我安装了Python 3.6.8和Pandas

1 个答案:

答案 0 :(得分:2)

获取数据中所有不同的颜色。然后根据该颜色过滤每一行。最后,保存到一个csv文件中。

import pandas as pd
df = pd.read_csv('myfile.csv')
#get all distinct colour
for color in df['colour'].unique():
    #filter the data for each color and excluding John
    df_temp = df[(df['colour'] == color) & (df['name'] != 'John')] 
    #save into csv file using filename: color_colour.csv
    df_temp.to_csv(color.lower() + '_colour.csv', index=False)