过滤CSV文件列,然后将其导出到Excel

时间:2017-11-23 19:12:30

标签: python excel csv

我在csv文件中有一个庞大的数据集,如果它们等于334,则想要过滤其中一列,然后将所有数据集导出到excel文件中!当文件被过滤时,它可以在excel文件中使用。到目前为止,我可以设法编写此代码,但我不知道如何过滤列,然后将所有内容导出到Excel文件中。

import itertools
import csv   
from itertools import islice

with open("eee.csv", 'r') as my_file:
    reader = csv.reader(my_file)
    for row in itertools.islice(reader, 100):
         print (row)

3 个答案:

答案 0 :(得分:0)

您可以使用pandas dataframe:

import pandas as pd

df = pd.read_csv('eee.csv', header=0)

df = df[df['column_name'].map(lambda x: x == 334)]

df.to_csv('eee.csv')

答案 1 :(得分:0)

熊猫在这些方面很出色,但如果你想在没有......的情况下做同样的事情。

import itertools
import csv   
from itertools import islice

column_nbr = 3
keep = []

with open("eee.csv", 'r') as my_file:
    reader = csv.reader(my_file)
    for row in itertools.islice(reader, 100):
        print (row)
        cmp = row[column_nbr]
        if cmp == 334:
            keep.append(row)

with open('filtered.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(keep)

只要保持列表不会太长,这只能合理地运行。 如果保持列表很长,您可以改为保留文件并附加到该文件。

还有另一种方法,您可以将打印输出传输到文件。 类似的东西:

python the_read_script_with_print.py > filtered_rows.txt

上面代码中的更改只是忘记了保持列表以及将结果写入文件,只需在if语句中执行print(row),无需将行保存在内存中,管道将直接将它们放在文本文件中。

最后,excel会打开csv就好了(虽然本地设置可能会让你到达你自己要切割列的位置)

或者根本不使用python是另一种类似问题的方法......

在cmd.exe中的Windows上:FINDSTR /C:",334," eee.csv > filtered_rows.txt

在Linux上:请参阅caot的答案

答案 2 :(得分:0)

执行以下操作:

cat eee.csv | grep ,334, > filtered_rows.txt