我在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)
答案 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