我有一个像这样的csv文件:
1 2 3 4 5 6
4 5 6 3 # 2
2 4 5 6 3 1
3 4 % $ 2 1
1 2 3 4 5 8
我只想要包含所有数字的行,而不是任何其他字符。有没有办法只跟踪正确的行,其中只有数字。
到目前为止,我只有这个:
import csv
def get_rows(csv_file):
csv_read = open(csv_file)
reader = csv.reader(csv_read)
invalid_rows = 0
for row in reader:
我只是不确定如何跟踪正确的行,并且能够将无效行添加到计数器。我希望以后能够使用正确的行,只需将不正确的行数添加到计数器中。
答案 0 :(得分:3)
我建议使用pandas,这在使用表格数据时非常强大。 有关使用的方法,请参阅此处的文章:http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.select_dtypes.html
注意:此代码是内存中的类型,因此可能无法正常工作
import pandas as pd
data_frame = pandas.read_csv(csv_file)
data_frame.transpose() # we are interested in the rows, but pandas is primarily column oriented
incorrect_cols = data_frame.select_dtypes(exclude=["number"])
number_cols = data_frame.select_dtypes(include=["number"])
number_cols.transpose() # now the old format again
答案 1 :(得分:1)
这是一个纯粹的python解决方案:
$ cat data
1 2 3 4 5 6
4 5 6 3 # 2
2 4 5 6 3 1
3 4 % $ 2 1
1 2 3 4 5 8
$ cat p.py
import csv, re
validRows=[]
with open('data', 'r') as f:
reader=csv.reader(f, delimiter=' ')
for row in reader:
if all([re.match(r'^\d+$', item) is not None for item in row]):
validRows+=[row]
print(validRows)
$ python3 p.py
[['1', '2', '3', '4', '5', '6'], ['1', '2', '3', '4', '5', '8']]
$
不使用re
:
import csv
validRows=[]
with open('data', 'r') as f:
reader=csv.reader(f, delimiter=' ')
for row in reader:
if all([item.isdigit() for item in row]):
validRows+=[row]
print(validRows)