新手问题.. 我有一个包含3列的大量(2M +行)csv文件
Name : Metric 1 : Metric 2
BOB : 1000 : 0
SUE : 1200 : 4
SAM : 1250 : 4
如何输出一个新文件,该文件只包含指标2不为零的完整行,并且仍保留标题?
感谢您的帮助
答案 0 :(得分:0)
您所要做的就是:
csv
文件并阅读行; csv
文件中输出这些行。这是一个简单的例子:
inp = open('input.csv', 'r')
out = open('output.csv', 'w')
lines = inp.readlines()
inp.close()
out.write(lines[0])
for i, line in enumerate(lines):
if i > 0:
cells = line.split(',')
if int(cells[2]):
out.write(line)
out.close()
上面的代码将生成您想要的输出,如下所示:
INPUT.CSV: -> OUTPUT.CSV:
Name,Metric 1,Metric 2 Name,Metric 1,Metric 2
BOB : 1000 : 0 -> SUE,1200,4
SUE,1200,4 -> SAM,1250,4
SAM,1250,4
答案 1 :(得分:0)
Python的csv模块有一个DictReader对象,可以很好地解决这个问题。我会在运行中读取和写入它们,因为在内存中保存大型数据集可能会在以后出现问题。
您可以检查所需列中的值是否为0.如果不是,请写下该行。
import csv
with open('mycsvinput.csv', 'r') as file_input, open('mycsvoutput.csv', 'w') as file_output:
csv_reader = csv.DictReader(file_input)
csv_writer = csv.DictWriter(file_output, fieldnames=csv_reader.fieldnames)
csv_writer.writeheader()
for line in csv_reader:
if line['Metric 2'].strip() != '0':
csv_writer.writerow(line)
编辑:如果csv中的行在每个值上都有空格填充,则可能需要在检查0之前将其删除
答案 2 :(得分:0)
您可以使用csv模块。
C:\Users\kvivek\Desktop>type test.csv
Name , Metric 1 , Metric 2
BOB , 1000 , 0
SUE , 1200 , 4
SAM , 1250 , 4
C:\Users\kvivek\Desktop>python
>>> import csv
>>> reader = csv.reader(open(r'C:\Users\kvivek\Desktop\test.csv'))
>>> for row in reader:
... if '0' not in row[2] :
... print row
...
['Name ', ' Metric 1 ', ' Metric 2 ']
['SUE ', ' 1200 ', ' 4']
['SAM ', ' 1250 ', ' 4']
>>>
答案 3 :(得分:0)
良好的数据结构和数据分析库是熊猫。
假设您已将数据存储在名为a.txt
import pandas
使用Python读取文件(在您的情况下,列用冒号分隔):
table=pandas.read_csv("a.txt",sep=":")
打印以查看您的内容:
print(table)
Name Metric 1 Metric 2
0 BOB 1000 0
1 SUE 1200 4
2 SAM 1250 4
创建一个新数据框,其中仅包含“公制2”为0的行。
table2=table.loc[table[' Metric 2 '] == 0]
打印以检查。
print(table2)
Name Metric 1 Metric 2
0 BOB 1000 0
将过滤后的数据框导出为CSV文件。
table2.csv("a.csv")
答案 4 :(得分:0)
为什么你需要python呢?只需使用head
和grep
。
head -1 your.csv > result.csv
grep -v ": 0$" your.csv >> result.csv # since i can't see your exact format, you'll have to make sure that ": 0$" is right...
但是如果你坚持使用python,那就做:
import pandas as pd
df = pd.read_csv('your.csv', sep=':')
df[df['Metric 2'] != 0].to_csv('result.csv')